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