3

データベースの特殊文字に問題があります。これらは正しく表示されるようになりましたが、SQLはクエリでそれらを無視しているようです。たとえば、残念ながら私はこれらのエントリを持っています:
Morgait
Morgaít
Mórgait

これらの名前にはUNIQUEキーがあり、最初の名前の後に2番目と3番目を追加しようとすると、名前が一意でなくなったため、最後の2つを追加できなかったと言ってすでに壊れています。つまり、íは通常のiとして扱われ、óは通常のoとして扱われます。

クエリを実行すると SELECT * FROM member WHERE charname = 'Morgait' 、結果として3つすべてが取得されます。iをí、oをó、またはその両方に同時に変更した場合も同様です。

データベースにこれらの違いを認識させるにはどうすればよいですか?テーブルの照合をascii_general_ciに設定しています(UTF 8ユニコードciも試しました)。

4

1 に答える 1

1

これらの照合はすべてaccent insensitive. utf8_binどちらがであるかを試すことができますがaccent sensitive、それもcase sensitiveです。éequalseなどのアクセントを区別しない照合ëを使用します。

SELECT * FROM member WHERE charname = 'Morgait' COLLATE utf8_bin 

トリックを行う必要があります。大文字と小文字を区別しない必要がある場合は、試すことができます

SELECT * FROM member WHERE LOWER(charname) = LOWER('Morgait') COLLATE utf8_bin
于 2012-05-06T15:11:52.987 に答える