朝、
ここで少しアドバイスを求めました。
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;