2

「e」と「é」を区別できる文字セットであるUTF-8照合データベースを使用しています...残念ながら、MySQLWorkbenchおよび/またはJDBCから次の2つの挿入を直接発行しています

INSERT INTO `ucap_i10_13_02_27$12_48_41`.`attributes` (`attribute`, `intvalue`) VALUES ('brown-séquard', 1);


INSERT INTO `mytable`.`attributes` (`attribute`, `intvalue`) VALUES ('brown-sequard', 1);

'attribute'列がテーブルの唯一の主キーである場合、結果は...

Error Code: 1062 : Duplicate entry 'brown-sequard' for key 'PRIMARY'

さらに、最初のアクセント付き挿入を発行した後、次のようなアクセントなしバージョンでクエリを実行します。

select * from `mytable`.`attributes` where attribute='brown-sequard';

アクセントバージョンのブラウンセカールを返します。

MySQLが主キーの制約に関してアクセント付き文字とアクセントなし文字の違いを認識できるようにするにはどうすればよいですか?

更新1

私はこのStackOverflowの投稿にある解決策を試しました:

MySQLデータベースのÉvs。E

つまり、パラメータを追加しました

&useUnicode=true&characterEncoding=UTF-8

JDBC接続文字列へ。これは役に立ちませんでした:-(

更新2

MySQLWorkbenchではなくコマンドラインmysqlクライアントからアクセント付きの「e」'(brown-séquard')を指定して挿入コマンドを実行すると、次の興味深いエラーコードが表示されます。

ERROR 1366 (HY000): Incorrect string value: '\x82quard' for column 'attribute' at row 1

しかし、データベース接続自体ではなく、Windowsコマンドシェル/CLIクライアントがアクセントエンコーディングを窒息させることに関係しているのではないかと思います。

4

1 に答える 1

1

あなたが経験していることは、文字照合、つまりMySQL が文字を比較する方法に関連しています。

クエリで句を使用COLLATEして、この 1 つのクエリに対して特定の照合の使用を強制するか、テーブル定義で列の照合を変更して、常に何らかの方法で照合することができます。

于 2013-02-27T21:32:51.643 に答える