質問

私は「ニックネーム」、UTF-8エンコードされた列(20)という列があるユーザーテーブルを持っています、表はInnoDBです。2つのレコードがあることは、ニックネーム= 'Gunni'と他のニックネーム= 'günni'を持っています。この列に一意のインデックスを適用しようとしたとき、MySQLはこのエラーを与えました:

ERROR 1062(23000)263行目:キー2

のための重複入力 'Gunni'

データをチェックした「gunni」という名前のレコードが1つしかチェックされていません、そして私が他の何かに 'Günni'レコードを変更したら、一意のインデックスをもう一度適用してください、すべてがうまく機能します。

'Günni'& 'Gunni'が複製されるの?これはそれらのための16進数です、私はこれをmysqlのhex()関数で取得します:

ガンニ - > 67756E6E69

Günni - > 67C3BC6E6E69

彼らは明らかに異なります。MySQLがこれら2を同じように扱う方法は?それとも私がユニークなインデックスについて知らないことがありますか?またはこれはMySQLのバグになることができますか?

役に立ちましたか?

解決

あなたが使用している照合のためです。

_ciで終わるものは、大文字と小文字が区別されません(そしてまたアクセント/ウムラウトが鈍感になりません)。それでは、あなたがあなたの照合を変更しない限り、MySQLは "Günni"と "Gunni"を考えるでしょう。

docs: http://dev.mysql.com/doc / refman / 5.0 / en / charset-table.html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top