Mysql数据库按照varchar字符串类型排序和按照int整型类型排序的区别和注意点及解决方案

自己建表的时候,把一个字段类型创建为varchar(2)
,其实应该建为int(2)的。因为我只允许输出数字。这本来也没什么,无非就是占点空间,懒得改了。但是今天在后台发现排序有问题。于是,没办法,改
之。下面简单说一下MySQL的varchar排序问题,引以为戒。

下面,我从数据库里面以server_id排一下序,大家来看一下排序后的结果:

select server_id from cardserver where game_id = 1 order
by server_id desc limit 10;

+-----------+
| server_id |
+-----------+
| 8         | 
| 7         | 
| 6         | 
| 5         | 
| 4         | 
| 3         | 
| 2         | 
| 10        | 
| 1         | 
+-----------+

很明显,我想要的结果应该是 10,8,7,6,5 这样的。但是这个10排在了2的后面。按照字符串来排的。其实我是想把它当做数值来排。

手动转换类型:

用下面的方法就可以了,使server_id+0之后再排序,问题解决了。

select server_id from cardserver where game_id = 1 order
by server_id+0 desc limit 10;

+-----------+
| server_id |
+-----------+
| 10        | 
| 8         | 
| 7         | 
| 6         | 
| 5         | 
| 4         | 
| 3         | 
| 2         | 
| 1         | 
+-----------+

使用MySQL函数CAST/CONVERT:

mysql为我们提供了两个类型转换函数:CAST和CONVERT,现成的东西我们怎能放过?

CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。
这个类型 可以是以下值其中的 一个:
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]

所以我们也可以用CAST解决问题:

select server_id from cardserver where game_id = 1 order
by CAST(server_id as SIGNED) desc limit 10;

也可以使用CONVERT来搞定此问题:

select server_id from cardserver where game_id = 1 order
by CONVERT(server_id,SIGNED) desc limit 10;

时间: 2024-10-12 17:07:54

Mysql数据库按照varchar字符串类型排序和按照int整型类型排序的区别和注意点及解决方案的相关文章

创建表的完整性约束 和 整型类型

创建表的完整性约束 宽度: 对存储数据的限制 char(1) 只能存一个字符 如果超了 mysql会自动帮你截取 1 插入的时候 mysql会自动截取 (浪费资源) 2 会直接报错(mysql严格模式)提示无法存储:Data too long for column 'name' at row 1 (推荐) 使用数据库的准则 能尽量少让数据库干活就尽量少干活 约束条件初识>>> null 与 not null  相当于None alter table t5 modify name char

MySql 基础学习笔记 1——概述与基本数据类型: 整型: 1)TINYINT 2)SMALLINT 3) MEDIUMINT 4)INT 5)BIGINT 主要是大小的差别 图 浮点型:命令

一.CMD中经常使用mysql相关命令 mysql -D, --database=name  //打开数据库 --delimiter=name  //指定分隔符 -h, --host=name  //server名称 -p,--password[=name]  //密码 -p,--port[=name] //端口号 --prompt==name  //设置提示符 -u, --user=name  //username -V, --version    //输出版本 能够组合使用,如 输入 -uu

golang的数据类型之整型类型

数据类型: 整数 : int, int32, int64, uint, uint32, uint64 字符串 : string 布尔:bool 浮点:float32 float64 uint 表示无符号整数类型. [[email protected] xiaochun]# cat int.go package main import "fmt" //演示golang中整数类型使用func main() { var i int = 1 fmt.Println("i ="

java 整型类型和进制转换

类型 占用存储空间 表数范围 Byte 1字节 -128~127 Short 2字节 -215 ~ 215-1 (-32768~32767) Int 4字节 -231 ~ 231-1 (-2147483648~2147483647) 约21亿 Long 8字节 -263 ~ 263-1 System.out.println(Integer.toBinaryString(a)); //整型转二进制 System.out.println(Integer.toOctalString(a)); //整型

访问Mysql数据库,连接字符串配置

Step1:App.config文件里进行配置 <?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> </startup> <connectio

一些平台无关的整型类型,int8_t,uint8_t....

pecific integral type limits Specifier Common Equivalent Signing Bits Bytes Minimum Value Maximum Value int8_t signed char Signed 8 1 −128 127 uint8_t unsigned char Unsigned 8 1 0 255 int16_t short Signed 16 2 −32,768 32,767 uint16_t unsigned short U

MySQL数据库8(七)列类型

列类型 整数类型 tinyint 迷你整型,系统采用一个字节来保存的整型,一个字节=8byte,最大能表示的数据是0-255. smallint 小整型,系统采用两个字节来保存的整型,能表示0-65535之间的整型 mediumint 中整型,采用三个字节来保存数据 int 整型,(标准整型),采用四个字节来保存数据. bigint 大整型,采用八个字节来保存数据. 实际应用中,应该根据对应的数据范围来选定对应的整型类型,通常使用的比较多的是tinyint和int. 无符号标识设定 无符号,表示

MySQL数据库无法使用+号连接字符串的处理方法

转自:http://www.maomao365.com/?p=10003 摘要: 下文讲述MySQL数据库,字符串连接的方法分享,如下所示:实现思路: 使用concat函数对两个字符串进行连接在MySQL数据库中,连接字符串,如果我们使用+号的话,就会出现结果"0",所以MySQL数据库,我们必须使用concat连接字符串,如下例所示: mysql >select concat('mysql','-','love') as t; 原文地址:https://www.cnblogs.

MySQL数据库(6)_MySQL数据库总结

sql语句规范 sql是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言. 在使用它时,只需要发出"做什么"的命令,"怎么做"是不用使用者考虑的.SQL功能强大.简单易学.使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据库均支持sql. <1> 在数据库系统中,SQL语句不区分大小写(建议用大写) .但字符串常量区分大小写.建议命令大写,表名库名小写: