嗯,忽然想继续看《高性能MYSQL》。然后就拿出来看了。
纠结的点在于,原来建表的时候比较依赖软件,导致对MYSQL底层存储的概念有些混淆。所以再review一下。
有两种类型的数字:整数和实数。
整数类型有:TINYINT --- 8位, SMALLINT --- 16位, MEDIUMINT --- 24位, INT --- 32位, BIGINT --- 64位。可以选择 UNSIGNED属性,扩大正整数的范围。
但是!!上述类型的存储长度是固定的。不管写什么int(4) tinyint(4)只可能对显示造成影响。对于存储和计算木有影响。我居然曾经以为有影响也是醉醉的。
实数类型有:FLOAT(4字节),DOUBLE(8字节),DECIMAL ---- 将数字打包保存到一个二进制字符串中,(每个字节保存9个数字),最多允许65个数字。
MYSQL使用double作为内部浮点计算的类型。也就是说,float只是省磁盘,需要运算时还需要转化。5.0版本之后,支持decimal计算。
字符:
varchar 变长 需要使用1或2个字节来记录字符串长度。由于变长,所以不便于更新操作。比较时会忽略开头和结尾的空格。
char定长,mysql会删除所有的末尾空格 采用空格填充方便比较。
binary/varbinary和char类似,分为定长和可变。将字符串转化为二进制存储,因此可以对比出开头结尾有空格的字符串的不同。
TEXT和BLOB区别在于:blob存储的是二进制数据,没有排序规定或字符集。text则有字符集和排序规则。
mysql对于这两者的排序不同与其他类型,它只对每个列的最前MAX_SORT_LENGTH字节做排序