Mysql数据类型
仅记录常见的Mysql数据类型。
整数类型
整数类型包含了:tinyint、smallint、mediumint、int、bigint;
整数类型含有unsigned属性,可以将正数上限扩充一倍。有符号和无符号类型存储空间及性能均相同;
int(11)中的11表示该类型的展示宽度,不表示该类型可以存储数据量的大小,仅用于限制显示字符个数;
应使用无符号整数存储IP地址,INET_ATON()和INET_NTOA()用于两者之间的转换。
实数类型
实数类型包含了:float、double、decimal;
float和double用于近似计算,decimal用于精确计算,实现是由Mysql Server实现;
在需要存储财务精确数据时,可以使用decimal,也可以使用bigint来代替,将待存储货币单位乘以相同的倍数即可,比如0.0001分,可以乘以1000000,存储1即可,以此规避精确度问题。
字符串类型
字符串类型包含了:varchar、char、blob、text等;
varchar用于存储可变长字符串,这里可变长是指存储空间仅与实际存储的值的长度有关。所以varchar除了存储指定的字符串内容之外,还需要1到2个字节存储字符串的长度,此处以255字节为分界,如果字符串长度超过255,则使用1字节,否则使用2字节;
char用于存储定长字符串,适合存储较短或者所有值均近似同一个长度的字符串,对于经常变更的数据,不容易产生碎片;
存储数据时,mysql会将char类型值中的末尾空格删除掉;
blob类型以二进制的形式存储很大的字符串数据,没有排序规则和字符集,text类型以字符形式存储很大的字符串类型;
在排序时,mysql对blob和text类型的数据仅将max_sort_length字节的头部内容作为排序依据。
日期时间类型
日期类型包含了datetime、timestamp,其中datetime精度为秒,与时区无关,占用8字节存储空间;timestamp表示当下时间到1970年之间的秒数,与时区有关,占用4字节存储空间。
位数据类型
位数据类型包含了bit和set,bit(1)表示包含一个单个位的字段,bit类型的列最大长度为64位。set可以用于保存一个包含很多单个位的值。