上午,
这里有一些建议。
在utf8-bin表中有一个用户名列。
希望对用户名保持区分大小写以便登录,但希望对用户名的可用性执行不区分大小写的检查。
使用
包围的问题CONVERT(`usrnm` USING latin1) #or other charset.
处理中文或阿拉伯语时的事情?
欢迎任何提示/想法/评论。
答案 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;