2
在这里寻求一点建议。
在utf8-bin表中有一个用户名列。
想要保持用户名登录时区分大小写,但希望对用户名的可用性执行不区分大小写检查。使用
CONVERT(`usrnm` USING latin1) #or other charset.
的东西,如中国或阿拉伯语打交道时
哪些问题包围?
任何提示/想法/评论最受欢迎。
在这里寻求一点建议。
在utf8-bin表中有一个用户名列。
想要保持用户名登录时区分大小写,但希望对用户名的可用性执行不区分大小写检查。使用
CONVERT(`usrnm` USING latin1) #or other charset.
的东西,如中国或阿拉伯语打交道时
哪些问题包围?
任何提示/想法/评论最受欢迎。
CREATE TABLE users (id INT NOT NULL PRIMARY KEY, usrnm VARCHAR(20) COLLATE UTF8_BIN);
INSERT
INTO users
VALUES (1, 'Пользователь'); -- First letter in upper case
SELECT *
FROM users
WHERE usrnm = 'пользователь'; -- First letter in lower case, not returned
SELECT *
FROM users
WHERE usrnm COLLATE UTF8_GENERAL_CI = 'пользователь'; -- First letter in lower case, returned
请注意,如果你想确保不区分大小写的独特性,这是更好地使列UTF8_GENERAL_CI
并宣布它UNIQUE
:
CREATE TABLE users (id INT NOT NULL PRIMARY KEY, usrnm VARCHAR(20) COLLATE UTF8_GENERAL_CI UNIQUE);
INSERT
INTO users
VALUES (1, 'Пользователь');
INSERT
INTO users
VALUES (2, 'пользователь'); -- unique violation
SELECT *
FROM users
WHERE usrnm = 'пользователь' COLLATE UTF8_BIN;
非常感谢你 - 这是票。 1 Q ...将列转换为utf8_general_ci不会破坏允许登录的查询的大小写敏感性? – 2012-04-24 10:36:54
@Ian:最有可能的是(如果你仅仅通过'usrnm ='value'来检查登录)。 – Quassnoi 2012-04-24 10:39:10