2009-08-03 14 views
4

LinuxシステムでMySQL 5.xxを実行しています。私のアプリケーションは、ä、ö、åなどの文字をデータベースに正しく書き込んで、これらの値を正しく取得します。しかし、WHEREを使ってchar 'ä'の検索をフィルタリングすると、 'a'文字を含むStringsも返されます。 MySQLがaをäと等しいと考える理由MySQL 5のä、ö、å文字などの問題

例クエリ:WHEREフィールド= '%Aは%' テーブルFROM

SELECTカラム。

+0

がhttp://stackoverflow.com/questions/を参照してください。 995894/mysql-query-with-where-clause-returning-different-results – karim79

+1

@ karim79:この質問は少し異なります。残念ながら、「MySQL」にはキリル文字「АВЕКМНОРСТУХ」とそのラテン文字を区別しない照合はありません。 – Quassnoi

答えて

7

MySQL 'は、照合を使用して文字値を比較します。

照合順序は、照合の際にどの文字が異なるかを定義するためにデータベースで使用されるルールのセットです。

大文字と小文字が区別される照合では、'QUERY''query'を区別します。大文字と小文字は区別されません。

アクセントの影響を受けやすい照合は、'résumé''resume'の間を区別します。アクセントの影響を受けません。

あなたの列のデフォルトの照合(おそらくUTF8_GENERAL_CI)では、umlauted文字が非umlautedと区別がつかない:

SELECT 'a' LIKE '%ä%' 
--- 
    1 

それらの間を区別するために、異なる文字などの異なるユニコードですべての文字を扱うバイナリ照合を(使用):

+0

大文字と小文字が区別され、アクセントが重要な照合が存在しますか?ありがとう – Paul

+0

@Paul: 'UTF8_BIN' – Quassnoi

+1

申し訳ありませんが、これは動作していないようです。 – Christian

3

注:多くのアプリケーションでは、同じ文字としてaとäを照合することが機能と見なされます。私の提案:どの行動が望ましいかを判断するために、クライアントと再度確認してください。

私も、言うメモをフォローアップかもしれない「我々はX日に述べたように、システムは、並べ替えると、次のように文字を見つけるだろう...」

+0

はい、これは本当です。これはgoogleによって行われるので、 "ż"、 "¼"、 "z"はすべて "z"として扱われ、こうすることで磨き上のテキストを検索することができます。要点は、似たような言葉を磨くようないくつかの言語はまったく異なる意味を持つことはめったになく、国の文字を傷つけることによって変えることができます(通常は文脈で理解することができます)。 – smok1

関連する問題