验证表中的pass
列AUTH
是否至少有 41 个字符,或从以下位置返回的任何值:
SELECT LENGTH(PASSWORD('foo'))
LENGTH(PASSWORD('foo'))
-------------------------
41
此测试用例演示了当表中的pass
列authbad
不足以容纳整个密码字符串时会发生什么:
CREATE TABLE auth (id VARCHAR(32), pass VARCHAR(41)); // pass column matches length
INSERT INTO auth VALUES ('abc',PASSWORD('abc'));
CREATE TABLE authbad (id VARCHAR(32), pass VARCHAR(32)); // pass column too short
INSERT INTO authbad VALUES ('abc',PASSWORD('abc'));
SELECT COUNT(1) FROM auth WHERE pass=PASSWORD('abc');
COUNT(1)
----------
1
SELECT COUNT(1) FROM authbad WHERE pass=PASSWORD('abc');
COUNT(1)
----------
0
另一个(不太可能)的问题是正在发生字符集转换,无论是在 INSERT 上还是在 SELECT 上都没有发生在另一个上。鉴于密码返回一个星号和十六进制数字(大写),但我真的不明白这应该是一个问题。