跳转至

数据类型

数值

数值类型分为整形和浮点型。

类型 大小 说明
tingint [unsigned] 1Byte \([-2^{7},2^{7}-1]\)
smallint [unsigned] 2Byte \([-2^{15},2^{15}-1]\)
mediumint [unsigned] 3Byte \([-2^{23},2^{23}-1]\)
int [unsigned] 4Byte \([-2^{31},2^{31}-1]\)
bigint [unsigned] 8Byte \([-2^{63},2^{63}-1]\)
bool 1bit 使用0 和 1表示真假
bit[(m)] - 位字段类型。M表示每个值的位数,范围从1到64。
float [(m,d)] [unsigned] 4Byte M指定显示长度,d指定小数位数
double [(m,d)] [unsigned] 8Byte M指定显示长度,d指定小数位数
decimal [(m,d)] [unsigned] - 定点数,M指定长度(最大 65),d指定小数位数(最大 30),默认为(10,0)

当插入的数值超过数据范围,会插入失败。要注意的是 bit 类型,在显示时是默认以 ascii 码的形式显示的。float 和 double 都会有精度问题,decimal 可以精确显示数据。

文本二进制

类型 大小 说明
char(size) size 固定长度字符串,size 指定字符个数,最大 255 字节
varchar(size) size 可变长度字符串,size 指定字符个数,最大 65535 个字节
blob - 二进制数据
text - 大文本,不支持全局索引,不支持默认值

要注意的是 mysql 中的 char(size) 中的 size 就是字符个数,可以是字母或汉字等等,这与一些编程语言中的 char 不同,如在 C/C++ 中汉字可能站 3 个 char 的大小。

char 和 varchar

  • varchar 的实际大小与存的数据有关,而 char 的实际大小就是开始指定的大小。char 类似 C/C++ 中 char 类型的数组,定义时就固定长度,而 varchar 像 string 大小和实际的数据相关。

  • varchar 长度可以指定为 0 到 65535 之间的值,但是有 1 - 3 个字节用于记录数据大小,所以说有效字节数是 65532。

  • 当我们的表的编码是 utf8 时,varchar(n) 的参数 n 最大值是 65532/3 = 21844 (因为utf中,一个字符占用3个字节),如果编码是 gbk,varchar(n)的参数 n 最大是 65532/2 = 32766(因为gbk中,一个字符占用2字节)。

  • char 会默认切掉字符串末尾的空格,如果需要保留末尾的空格,记得用 varchar 类型!

日期类型

类型 大小 说明
data 3Byte 格式:YYYY-MM-DD
datatime 8Byte 格式: YYYY-MM-DD hh:mm:ss
timestamp 4Byte 格式:YYYY-MM-DD hh:mm:ss,

枚举和集合

类型 大小 说明
enum - 枚举类型,用于存储单一值,可以选择一个预定义的集合。
set - 集合类型,用于存储多个值,可以选择多个预定义的集合。

语法:

enum('选项1','选项2','选项3',...)
set('选项值1','选项值2','选项值3', ...)

在插入时,枚举选择值的时候使用 '' 包起来的内容选择即可,或是使用每个选项的下标,这里下标从 1 开始。

集合在选择值的时候也是使用 '' 包起来的内容进行选择,选择多个值的时候 选择1,选择2,... 使用逗号分隔,或是使用位图的方式进行选择,1 代表选,0 代表不选,位图对应关系如下:

'选项值1','选项值2','选项值3', ...
 低位 -------------------- 高位
1: 1        0        0    ...
2: 0        1        0    ...
3: 1        1        0    ...
...

find_in_set

查某个子集是否在 集合 str_list 中。

find_in_set(sub,str_list):如果 sub 在 str_list 中,则返回下标;如果不在,返回0;str_list 用逗号分隔的字符串。