昨天推送的MySQL设计规范,本来有一条是关于字符集建议的,最终我给去掉了。说的是用单字节的latin1存储gbk\utf8\utf8mb4等多字节数据,这种情况下,如果存储的是ASCII字符,是可以节省存储空间的,但如果存储的是多字节字符,存储空间则无法节省。经过测试,如果只是数据存取,那么是完全OK的,但如果涉及到字符串排序,或者字符串等值查询时,得到的结果有可能不是预期那样的。因此,建议还是用相应的恰当的字符集,没必要个自己找事制造不可预期的麻烦。
我还推荐使用DATETIME类型,有不少人还认为它是8字节长度,更浪费空间。事实上,5.6版本后,DATETIME类型已经进行优化了,不仅缩短为5字节,同时也支持更新为当前最新时间戳功能,更方便了,因此我才优先推荐。
关于索引的那部分,淘宝丁奇同学指出第二小块不够严谨。我经过实际测试,验证确实如此,已经更新了,在此向大家道歉,我自己也犯了经验主义错误,同时感谢丁奇同学的细心指教。
此外,这份规范主要适用MySQL 5.6及之前的版本,不过文中提到的ICP、DATETIME是5.6版本才有的,请注意下。