将mysql utf8-bin字段转换为低/大写

时间:2012-04-24 10:18:17

标签: mysql character-encoding

上午,

这里有一些建议。

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

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

使用

包围的问题
CONVERT(`usrnm` USING latin1) #or other charset.

处理中文或阿拉伯语时的事情?

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

1 个答案:

答案 0 :(得分: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;