私はdbでUTF-8文字を扱っていて、データベースに入れる前にutf-8からasciiに変換するためにphp inconv関数を使っています。mysqlインデックスはUTF-8をASCIIに変換しますか?
このようにして、私はデータベースに問い合わせる前にクエリをASCIIに変換すると思いました。 しかし、今私はmysqlが私のためにこの翻訳を行うと信じてくれる結果を見ています。それが正しいかどう
は誰もが知っている、と私は(とにかく非常に効果的ではない)、PHPでの全体inconvをスキップすることができます。一例として、、それがASCIIへの変換は、ある時点で起こっていることを信じて私をリードして「lësci」リターン「Lesci」を検索。
テーブルはutf_8_unicode_ciでエンコードされています。 フィールドはフルテキストインデックスを持つvarchar(255)です。 クエリはかなり単純です "SELECT * FROM users WHERE name = 'lësci'"は 'lsci'と 'Lesci'の両方を返します。
私はMySQL 5.0.75で試してみましたが、あなたが説明しているように問題はありません。 'l'sci'と 'Lesci'はそれぞれの文字列にのみ一致します。どのバージョンのMySQLを使用しているか、テーブル定義は何ですか?また、問題を示すクエリの例は何ですか? –
ありがとうBill、私はMySQL 5.027を使用しています。このテーブルはutf_8_unicode_ciでエンコードされています。フィールドはフルテキストインデックスを持つvarchar(255)です。 クエリはかなり単純です "SELECT * FROM users WHERE name = 'lësci'"は 'lsci'と 'Lesci'の両方を返します。 – pedalpete
私はまだあなたが記述した動作を再現できません。照合の名前を指定しましたが、文字セットは指定しません。あなたは単に '' SHOW CREATE TABLE users'の結果を与えることができますか?また、あなたのセッションの文字セットと照合は何ですか?(つまり、 'SET NAMES'コマンドを実行しましたか?) –