2

朝、

ここで少しアドバイスを求めました。

utf8-bin テーブルにユーザー名列があります。

ログインのユーザー名で大文字と小文字を区別したいが、ユーザー名の可用性については大文字と小文字を区別しないチェックを実行したい。

使用を取り巻く問題

CONVERT(`usrnm` USING latin1) #or other charset.

中国語やアラビア語のようなものを扱うときは?

ヒント/考え/コメントは大歓迎です。

4

1 に答える 1

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;
于 2012-04-24T10:23:29.600 に答える