2012-05-06 6 views
3

私のデータベースに特殊文字に関する問題があります。今は正しいと表示されますが、SQLではクエリで無視されるようです。これらの名前は一意のキーを持っていたし、最初の後の第二と第三を追加しようとしたとき、それはすでに破る今
Morgait
Morgaít
Mórgait
特殊文字を照会する

:たとえば、残念ながら私はこれらのエントリを持っています名前がもはやユニークではないため、最後の2つは追加できないと言っています。要するに、Ñは通常のiとして扱われ、óは通常のoとして扱われる。

私が照会するとき: SELECT * FROM member WHERE charname = 'Morgait' 私は結果としてすべて3を得る。同じように私はiをi、o、または両方に同時に変更します。

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

答えて

1

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

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

トリックを行う必要があります。大文字小文字の区別を必要としない場合は、試してみてください

SELECT * FROM member WHERE LOWER(charname) = LOWER('Morgait') COLLATE utf8_bin 
+0

ありがとうございます!アクセント記号と大文字小文字を区別しない照合はありませんか? –

+0

私が知る限り、そうはありません。 http://bugs.mysql.com/bug.php?id=19567 – cypher

+0

を参照してください、2006年の日付とまだ修正はありません..とにかく答えてくれてありがとう! 大文字と小文字の区別については、小文字をすべて保存してフォームの入力を小文字に変換してから、ウェブサイトに正しく表示するように修正します。 –