2012-04-24 46 views
2

早上,将mysql utf8-bin字段转换为低位/大写

在这里寻求一点建议。

在utf8-bin表中有一个用户名列。

想要保持用户名登录时区分大小写,但希望对用户名的可用性执行不区分大小写检查。使用

CONVERT(`usrnm` USING latin1) #or other charset. 

的东西,如中国或阿拉伯语打交道时

哪些问题包围?

任何提示/想法/评论最受欢迎。

回答

1
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; 
+0

非常感谢你 - 这是票。 1 Q ...将列转换为utf8_general_ci不会破坏允许登录的查询的大小写敏感性? – 2012-04-24 10:36:54

+0

@Ian:最有可能的是(如果你仅仅通过'usrnm ='value'来检查登录)。 – Quassnoi 2012-04-24 10:39:10