データベース内の奇妙な文字エンコーディング: 古いスクリプトのデコード、新しいスクリプトの失敗
問題ステートメント:
古いスクリプトから新しい CodeIgniter ベースのスクリプトへの Web サイト移行で問題が発生する文字エンコーディング付き。古いスクリプトではデータベースに保存されているペルシア語文字が表示されますが、新しいスクリプトでは破損したテキストが表示されます。
分析:
データベースのテーブルと列は照合順序で構成されています。 utf8_persian_ci の。新しいスクリプトでは、文字セットと照合として UTF-8 も使用されます。この問題は、古い TubaDBEngine を使用する際の文字の元々のデータベースへの保存方法に起因します。
古いスクリプトの動作:
ペルシア語文字がスクリプトに挿入されたときTubaDBEngine を使用してデータベースに保存すると、UTF-8 ではなく別のエンコーディングで保存され、次のような文字が表示されます。データベース内の「عمران」。ただし、古いスクリプトはこれらの文字を正しくデコードして表示できました。
新しいスクリプトの問題:
新しいスクリプトは、UTF-8 用に正しく構成されていますが、 TubaDBEngine のエンコーディングを使用して、データベースに元々格納されていた文字をデコードします。その結果、新しいスクリプトはデータを取得するときに破損したテキストを表示します。
解決策:
SELECT CONVERT(BINARY CONVERT(fName USING latin1) USING utf8) FROM tnewsgroups
UPDATE tnewsgroups SET fName = CONVERT(BINARY CONVERT(fName USING latin1) USING utf8)
データ変換後、新しいスクリプトはペルシア語文字を正しく取得して表示できるようになります。
以上が新しい CodeIgniter スクリプトでは破損したペルシア語文字が表示されるのに、古いスクリプトでは表示されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。