2012-04-24 42 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

相關問題