4

私のMySQLには、次のような文字列が格納されていますیکی از Ø。テーブルの文字セットはutf8で、照合はutf8_general_ciです。

MySQLから文字列を取得すると、ブラウザに次のように表示されますیکی از بهترین راه。問題ありません(ペルシア語です)。

ノート:

  • mysql_query("SET NAMES 'utf8_persian_ci'");MySQLに接続して使用しました。

  • <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />各ページの先頭にタグを付けました。

 

今、私は使用する必要がありますmysql_query("SET NAMES 'utf8'");

しかし、それを使用した後、ブラウザは次のような文字列を表示します:( یکی از ØMySQLに保存されているのと同じです)。

MySQLに保存されているレコードを変更して問題を解決するにはどうすればよいですか?または、PHPコードを使用して出力エンコーディングを変換しますか?

4

3 に答える 3

4

問題は、SET NAMES 'utf8_persian_ci'コマンドが無効だったことです(utf8_persion_ciは照合であり、エンコーディングではありません)。ターミナルで実行すると、エラーが表示されますUnknown character set: 'utf8_persian_ci'。したがって、アプリケーションは、データを格納latin1するときに文字セットを使用していました。MySQLは、入力をlatin1文字として解釈し、utf-8としてエンコードして保存しました。同様に、データが引き出されたとき、MySQLはそれをUTF-8からlatin1に、そして(願わくば、ほとんどの場合)あなたが与えた元のバイトに変換し直しました。

つまり、データベース内のすべてのデータが完全に台無しになっていますが、それはたまたま機能していました。

これを修正するには、行ったことを元に戻す必要があります。最も簡単な方法は、PHPを使用することです。

  1. SET NAMES latin1;
  2. すべてのテーブルからすべてのテキストフィールドを選択します。
  3. SET NAMES utf8;
  4. 変更されていない同じ文字列を使用して同じ行を更新します。

または、MySQL内でこれらの手順を実行することもできますが、MySQLはデータを特定の文字セットであると理解するため、注意が必要です。テキスト列をBLOBタイプに変更してから、utf8文字セットを使用してテキストタイプに戻す必要があります。MySQLドキュメントの下部にあるALTER TABLE赤い「警告」というラベルの付いたセクションを参照してください。

これらのいずれかを実行すると、データベース列に格納されているバイトは、それらが主張する実際の文字セットになります。次に、将来行う可能性のあるPHPからのデータベースアクセスを常に使用するようにしてください。mysql_set_charset('utf8')そうでなければ、あなたは再び物事を台無しにするでしょう。(単純なものは使用しないでくださいmysql_query('SET NAMES utf8')接続のリセットなど、latin1知らないうちにリセットできる場合があります。mysql_set_charset()必要に応じて文字セットを設定します。)

mysql_*関数から切り替えて、PDO代わりにPDOdsncharset=utf8のパラメーターを使用するのが最適です。

于 2013-01-10T14:22:29.227 に答える
1

可能な解決策:

  1. サイトの.htaccessファイルに「AddDefaultCharsetUTF-8」を追加します。
  2. ヘッダーを追加('Content-Type:text / html; charset = utf-8'); PHPファイルの先頭に移動します。
  3. ペルシア語で表示する必要のあるデータに対してutf8_encode()php関数を使用します。
于 2013-01-10T13:30:30.060 に答える
1

おそらく必要なのは、文字セットと照合の列を変更することです。

このクエリを実行してみてください:

ALTER TABLE  `YOUR_TABLE_NAME` CHANGE  `YOUR_COLUMN_NAME`  `YOUR_COLUMN_NAME` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL

(この例では、デフォルトのNULL値を持つVARCHARを想定しています)

これで問題が解決する場合は、my.confファイルに以下のコードを挿入して、utf8をデフォルトの文字セットにすることができます。

default-character-set   = utf8
于 2013-01-10T11:51:13.953 に答える