对于数据优化,要选择最合适的数据类型,而不是最大的。
- 整形
- TINYINT:有符号值 -128-127 (二百五)
无符号值 0-255
占 1 个字节;
2.SMALLINT:有符号值 -32768-32767 (六万五)
无符号值 0-65535
占 2 个字节;
3.MEDIUMINT:有符号值 -8388608-8388607 (一千六百万)
无符号值 0-16777215
占 3 个字节;
4.INT:有符号值 -2147483648-2147483647 (四十二亿)
无符号值 0-4294967295
占 4 个字节;
5.BIGINT:有符号值 -9223372036854775808-9223372036854775807 (千亿万亿(ps:有这个念法吗,哈哈))
无符号值 0-18446744073709551615
占 8 个字节;
例如:年龄,就应该用TINYINT就够了。想起自己原来全是用INT。
- 浮点型
用来记录一些小数。
1.FLOAT:能精确到小数点后7位,一般都用这个,至于具体有多大,这个:-3.402823466E+38-(-1.175494351E-38)。E+38=10^38
2.DOUBLE:大概是FLOAT的十倍。
- 日期时间型
传说用得不多,因为要考虑跨时区的问题,一般情况都是用数字来储存的。但是,还是礼貌的列一下:
1.YEAR(1970-2069); 2.TIME(-8385959到8385959); 3.DATE(活不到); 4.DATETIME(也活不到,精确到秒); 5.TIMESTAMP(1970.01.01.00:00:00-2037.12.31.23:59:59)。
- 字符型
1.CHAR[M]:0<=M<=255 个字节,定长;
2.VARCHAR[M]:L+1 个字节 L<=M 且 0<=M<=65535,变长;
3.TINYTEXT:L+1 个字节,L<2^8;
4.TEXT:L+2 个字节,L<2^16;
5.MEDIUMTEXT:L+3 个字节,L<2^24;
6.LONGTEXT:L+4 个字节,L<2^32;
7.ENUM('value1','value2',...):1或2个字节,却决于枚举值的个数,最多65535个值;
8.SET('value1','value2',...):1、2、3、4或8个字节,取决于SET成员的数目,最多64个成员;
性别什么的就可以用枚举了。枚举只能选一个,SET可以选其中的各种排列组合。