答えはとても簡単ですが、バナナを使います。私は利用可能なすべての解決策を試したと思います。どうぞ...
文字セットlatin1のデータベースがあります。ええ、私はutf8でそれを持っているべきです、しかし私はそれにいくつかの実行中のプロジェクトを持っているので、私はそれらを台無しにしたくありません。
問題はに付属しSELECT
ていますLIKE "%...%"
テーブルはutf8で、COLLATEutf8_general_ciを使用します。フィールドもutf8_general_ci照合を使用したutf8です。私のスクリプトファイル(php)はutf-8でエンコードされており、サーバーはutf-8のファイルも提供します。つまり、すべてがutf-8です。
わかりました。すべてがutf8_general_ciと照合されているので、大文字と小文字を区別せず、アクセントを区別しない検索ができるはずです。例えば:
テーブルにいるproviders
...
id providerName
1 Jose
2 José
私はできるはずです...
SELECT * FROM providers WHERE providerName LIKE "%jose%"
また
SELECT * FROM providers WHERE providerName LIKE "%josé%"
そして、どちらの場合も、2つの行が返されます。しかし、最初のクエリでは、行1しか取得できません。2番目のクエリでは、2行目しか取得できません。大文字と小文字を区別しない検索はうまく機能するようですが、アクセントを区別しない検索は機能しません。
COLLATE utf8_general_ci
そこで、LIKEの後に追加してみました"%...%"
。同じ結果。
次に、接続がlatin1(víaPHP関数mysql_client_encoding()
)で行われていることを発見しました。そのため、接続が確立されるたびにクエリを追加して、utf8を使用するように指示しました。SET NAMES UTF8 COLLATE utf8_general_ci
ANDphpの両方を使用しましmysql_set_charset()
た。この構成を追加すると、最初のクエリは行1を返しますが、2番目のクエリは結果を返しません。さらに、すべての結果はまれな文字を返します(すべてがutf8に設定されている場合でも、ðのように)。
これは私を困惑させています。すべてがUTF8で設定されていますが、(I)期待どおりに機能しません。
MySQL Server 5.0.95
PHP 5.2.14
Win7