Data Types
数值
数值类型分为整形和浮点型。
类型 | 大小 | 说明 |
---|---|---|
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 | - | 集合类型,用于存储多个值,可以选择多个预定义的集合。 |
语法:
在插入时,枚举选择值的时候使用 '' 包起来的内容选择即可,或是使用每个选项的下标,这里下标从 1 开始。
集合在选择值的时候也是使用 '' 包起来的内容进行选择,选择多个值的时候 选择1,选择2,...
使用逗号分隔,或是使用位图的方式进行选择,1 代表选,0 代表不选,位图对应关系如下:
find_in_set
查某个子集是否在 集合 str_list 中。
find_in_set(sub,str_list):如果 sub 在 str_list 中,则返回下标;如果不在,返回0;str_list 用逗号分隔的字符串。