存储MD5哈希或NULL的最佳MySQL数据类型

use*_*531 10 php mysql md5

我有一个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不占用空间.

(强调我的)