0

答えはとても簡単ですが、バナナを使います。私は利用可能なすべての解決策を試したと思います。どうぞ...

文字セット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_ciANDphpの両方を使用しましmysql_set_charset()た。この構成を追加すると、最初のクエリは行1を返しますが、2番目のクエリは結果を返しません。さらに、すべての結果はまれな文字を返します(すべてがutf8に設定されている場合でも、ðのように)。

これは私を困惑させています。すべてがUTF8で設定されていますが、(I)期待どおりに機能しません。

MySQL Server 5.0.95
PHP 5.2.14
Win7
4

2 に答える 2

2

機械を止めろ!

私はすべてをうまくやっていることを知りました、そしてそれは期待通りに反応しました。唯一の問題は、テーブル、フィールド、ファイル、およびサーバーがutf8にある場合でも、テーブルにデータが入力されたときに(過去のある時点で)、latin1で接続が確立されたことです。

そこで、テーブルにutf8接続を再設定しましたが、問題なく機能しました。

君たちありがとう!

于 2012-09-11T14:37:33.483 に答える
0

これを適切にテストするための設定はありませんが、考えられる解決策は次のとおりです。UTF8を設定する場所はたくさんあります!:)

于 2012-09-11T07:58:09.667 に答える