具有最少字符数的排序规则*对于散列密码是必需的*
Collation with Least Amount of Characters *Necessary* for Hashed Passwords
我正在尝试找出应该用于仅包含两列 email
和 password
的简单 user
表的排序规则,其中 [=12] 的输入=] 将是 password_hash($str, PASSWORD_DEFAULT)
.
的输出
password_hash 所需的最轻量级排序规则是什么?是ascii_bin
吗? latin1_bin
?
整理性能...
..._bin
要做的事情最少,所以他们最快。
ascii_...
检查您是否只使用了 7 位;这么快。
..._general_ci
只检查字节,不检查字节组合。示例:德语 ß
<> 'ss',与大多数其他归类不同。
utf8_...
和 utf8mb4_...
检查有效编码的字节。
同时,MySQL 8.0 使 utf8mb4_...
归类 "orders of magnitude faster" 比 5.7 更甚。
但我通常发现其他考虑因素在MySQL的任何操作中都更为重要。
另一个例子... SELECT ... function(foo) ...
-- 评估函数的成本相对于获取行的成本通常是微不足道的。因此,我专注于如何优化获取行。
至于哈希,...这取决于函数returns是十六进制字符串还是一堆字节...
- Hex:使用
CHARACTER SET ascii COLLATION ascii_bin (or ascii_ci)
,...ci
会进行大小写折叠,从而更加宽容;这可能是案例的 'right' 排序规则。
- 字节:使用数据类型
BINARY
;大致相当于 CHAR CHARACTER SET binary
.
至于是用BINARY
还是VARBINARY
还是CHAR
还是VARCHAR
,要看函数returns是否定长了结果。例如:
MD5('asdfb') --> '23c42e11237c24b5b4e01513916dab4a'
returns 正好是 32 个十六进制字节,所以 CHAR(32) COLLATION ascii_ci
是 'best'.
但是,您可以使用 BINARY(16)
(无整理)保存 space,然后将 UNHEX(MD5('asdfb'))
放入其中。
UUID() --> '161b6a10-e17f-11e8-bcc6-80fa5b3669ce'
,其中有一些破折号需要去掉。否则为 CHAR(36)
或 BINARY(16)
.
我正在尝试找出应该用于仅包含两列 email
和 password
的简单 user
表的排序规则,其中 [=12] 的输入=] 将是 password_hash($str, PASSWORD_DEFAULT)
.
password_hash 所需的最轻量级排序规则是什么?是ascii_bin
吗? latin1_bin
?
整理性能...
..._bin
要做的事情最少,所以他们最快。
ascii_...
检查您是否只使用了 7 位;这么快。
..._general_ci
只检查字节,不检查字节组合。示例:德语 ß
<> 'ss',与大多数其他归类不同。
utf8_...
和 utf8mb4_...
检查有效编码的字节。
同时,MySQL 8.0 使 utf8mb4_...
归类 "orders of magnitude faster" 比 5.7 更甚。
但我通常发现其他考虑因素在MySQL的任何操作中都更为重要。
另一个例子... SELECT ... function(foo) ...
-- 评估函数的成本相对于获取行的成本通常是微不足道的。因此,我专注于如何优化获取行。
至于哈希,...这取决于函数returns是十六进制字符串还是一堆字节...
- Hex:使用
CHARACTER SET ascii COLLATION ascii_bin (or ascii_ci)
,...ci
会进行大小写折叠,从而更加宽容;这可能是案例的 'right' 排序规则。 - 字节:使用数据类型
BINARY
;大致相当于CHAR CHARACTER SET binary
.
至于是用BINARY
还是VARBINARY
还是CHAR
还是VARCHAR
,要看函数returns是否定长了结果。例如:
MD5('asdfb') --> '23c42e11237c24b5b4e01513916dab4a'
returns 正好是 32 个十六进制字节,所以 CHAR(32) COLLATION ascii_ci
是 'best'.
但是,您可以使用 BINARY(16)
(无整理)保存 space,然后将 UNHEX(MD5('asdfb'))
放入其中。
UUID() --> '161b6a10-e17f-11e8-bcc6-80fa5b3669ce'
,其中有一些破折号需要去掉。否则为 CHAR(36)
或 BINARY(16)
.