2

こんにちは、このクエリに問題があります

SELECT * FROM table WHERE `name` LIKE '%tést%'

HMTL と SQL テーブルの両方に utf-8 エンコーディングがありますが、残念ながらエンコーディングがなくmysql_set_charset('utf-8')、使用できません。

で試しましiconv("UTF-8", "ISO-8859-1", $name)たが、クエリはtest.

これらすべてに一致test, tést, tèst, tëstさせたい:(で動作するためmysql_set_charset)

編集:

SET NAMES utf8可能性は近い...データベースmysql_set_charsetutf8エンコーディングを使用していますが、残念ながら、コンテンツはnorなしでWebから入力されていSET NAMESます。

現在、これらの関数を使用すると、結果が台無しになります。

version() 5.1.41-3ubuntu12.9

編集2:

私がそれを使用するSET NAMES utf8と、一致するだけtéstで、次のようになりますtést

私が使用するときはiconv("UTF-8", "ISO-8859-1", $name)、一致するだけですtest

4

4 に答える 4

1

簡単なテストを実行しましたが、MySQLは期待どおりに機能します。

おそらくそれはデータベースに接続する方法です。SETNAMES'utf8'を実行してみてください。クエリを実行する前に、それが役立つかどうかを確認してください。

また、mysql_set_charsetはダッシュなしでutf8を取る必要があることに注意してください!確かにPHPの例を参照してください。

乾杯!

于 2011-03-24T14:40:18.300 に答える
1

クエリを実行する前に、次のことを試してください。

mysql_query("SET NAMES 'utf8'", $conn);

*編集*

MySQLのバージョンによっては、次のものを使用する必要がある場合もあります。

mysql_query("SET CHARACTER SET utf8", $conn);

最後に、これを確実にするために、データベースはUTF-8文字セットを使用する必要があります。

ALTER <database_name> DEFAULT CHARACTER SET utf8;

*その他の編集*

編集内容を読んだ後、これはHTML/PHPエンコーディングの問題だと思います。文字を送信するページで、ヘッダーが正しく設定されていることを確認してください。

header('Content-Type: text/html; charset=UTF-8');

また、メタタグを介してこれを設定する必要があります。

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

mb_internal_encoding()次に、次の関数を使用してマルチバイトエンコーディングを設定します。

mb_internal_encoding("UTF-8");

デフォルトでは、PHPはISO-8859-1を使用します。

于 2011-03-24T14:42:02.047 に答える
0

次のような目的の正規表現でregexpを試してください

SELECT * FROM テーブル WHERE 名 REGEXP #REGULAR EXP HERE#

于 2011-03-24T14:38:38.457 に答える
0

SET NAMES を試しましたか?

mysql_query("SET NAMES utf8"); 
于 2011-03-24T14:39:47.590 に答える