SQLテーブルに単語のリストを入力しようとしています。テーブル自体は非常にシンプルです:
CREATE TABLE WORDS(
ID BIGINT AUTO_INCREMENT,
Word VARCHAR(128) NOT NULL UNIQUE,
PRIMARY KEY(ID)
);
私が遭遇している問題はこれです:次の挿入を連続して行うとき
INSERT INTO WORDS(Word) VALUES('Seth');
INSERT INTO WORDS(Word) VALUES('seth');
2番目の挿入は、制約違反(「キー 'Word'の重複したエントリ 'seth'」)で失敗します。
大文字と小文字を区別するためにUNIQUE
のWord
制約を取得するにはどうすればよいですか?
Mysqlは デフォルトでは大文字と小文字を区別しない :
おそらく大文字と小文字を区別する照合順序で列を作成する必要があります(例:utf8_bin):
CREATE TABLE WORDS (
ID BIGINT AUTO_INCREMENT,
Word VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE,
PRIMARY KEY(ID)
);
デフォルトでは、MySQLはvarchar
の大文字小文字と末尾のスペースの違いを無視します。
大文字と小文字を区別する必要がある場合は、テーブルをvarchar(...) binary
に変更できます。
つかいます show create table
MySQLがこれを完全な表記に変換する方法をよりよく理解するため。
大文字と小文字を区別するだけでなく、末尾のスペースに注意する必要がある場合は、varbinary
の代わりにvarchar
を使用します。
UNIQUEキーvarchar(1000)を作成しました。出来た。
試行錯誤を繰り返した結果、1100 varchar以上の値が失敗することがわかりました。
明確にするために、私は1001から1099の間は試しませんでした。
お役に立てれば。