1

単純な選択クエリと特殊文字に問題があります。Änneという名前を選びたいです。

SELECT *  FROM `names` WHERE `name` = 'Änne'

utf8_general_ci

  • アンネ
  • アン

わかった、 ...

utf8 general ci は非常に単純な照合です。すべてのアクセントを削除してから大文字に変換し、この種の「基本文字」の結果文字のコードを使用して比較します。 http://forums.mysql.com/read.php?103,187048,188748

utf8_unicode_ci

  • アンネ
  • アン

なぜ?

utf8_bin

  • アンネ

この時点では utf8_bin が正しい選択のようですが、大文字と小文字を区別しないで検索する必要があります。

SELECT *  FROM `names` WHERE `name` = 'änne'

utf8_bin

  • なし

そうする方法はありませんか?

php ucwords() を使用して最初の文字を大文字にすることもできますが、DB ソリューションを見つけたいと思います。編集: ucwords('änne') = änne なので、それも使えません


SELECT *  FROM `names` WHERE lower(`name`) = 'änne'

私のDBには「Änne」と「änne」の違いがないので、私のために働いています。

4

2 に答える 2

1

どうですか:

SELECT * FROM `names` WHERE upper(`name`) = upper("änne")

引用ドキュメント

デフォルトの文字セットと照合順序は latin1 と latin1_swedish_ci であるため、非バイナリ文字列の比較ではデフォルトで大文字と小文字が区別されません。これは、col_name LIKE 'a%' で検索すると、A または a で始まるすべての列値が取得されることを意味します。この検索で​​大文字と小文字を区別するには、オペランドの 1 つに大文字と小文字を区別する照合またはバイナリ照合があることを確認してください

つまり、大文字と小文字が区別される結果は、バイナリ照合順序を設定したためです。照合列を utf8_general_ci に設定し、検索時に変更できます。

col_name COLLATE latin1_general_cs LIKE 'a%'
于 2012-06-27T19:41:35.630 に答える
0

MySQL コードにエラーがあります:

SELECT * FROM names WHERE name = "Änne"

テーブル名とフィールド名を囲む引用符を削除します。

于 2012-06-27T19:42:47.340 に答える