我有一个PHP应用程序,它存储所有帐户,无论它们是否在一个表中是活动的.该表有一个名为"active"的列,它可以是NULL,表示该帐户处于活动状态,或者包含MD5哈希,这意味着该帐户处于非活动状态.
根据在mysql中有效存储md5哈希的最佳实践,如果列始终包含MD5哈希并且永远不为NULL,则首选BINARY(16),并且CHAR(32)是下一个最佳选择.由于我的大多数帐户都是活动的,因此大多数列值都是NULL,我最好使用不同的数据类型,如VARCHAR(32)?
Bil*_*win 20
使用VARCHAR是没有意义的.MD5哈希值始终为128位,因此CHAR(32)保存十六进制数字字符串,或者BINARY(16)保存UNHEX()十六进制数字后的字节字符串.
使用NULL与数据类型选择无关.MySQL可以存储NULL代替字符串,CHAR或VARCHAR.但事实上,在InnoDB的默认行格式中,MySQL根本不存储NULL,它不会为NULL列存储任何内容.
参考:http://dev.mysql.com/doc/internals/en/innodb-field-contents.html
关于NULL的有用说明:
对于第三行,我在FIELD2和FIELD3中插入了NULL.因此,在字段起始偏移中,这些字段的顶部位是打开的(值为94十六进制,94十六进制,而不是14十六进制,14十六进制).并且行更短,因为NULL不占用空间.
(强调我的)
| 归档时间: | 
 | 
| 查看次数: | 22255 次 | 
| 最近记录: |