2012-04-24 22 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に変換すると、ログインを許可するクエリの大文字小文字の区別が破棄されませんか? –

+0

@Ian:おそらくそれは(単に 'usrnm = 'value''でログインをチェックすると)そうです。 – Quassnoi

関連する問題