データの保存と取得の領域では、作業中に予期しない動作が発生することは珍しくありません。さまざまなシステムで。古いスクリプトから新しいスクリプトにデータを移行しようとする開発者が遭遇した、不可解なエンコーディングの不一致がこれに当てはまります。
問題: 文字化け
開発者奇妙な問題に直面しました。古いスクリプトで UTF-8 を使用してエンコードされたペルシア語文字は、新しいスクリプトを使用すると、両方のスクリプトを使用したにもかかわらず、文字化けしたテキストとして表示されます。同じ文字セット (UTF-8) を使用していたと考えられます。
容疑者: データベース構成
初期のトラブルシューティング作業はデータベース設定に重点を置きました。古いスクリプトはカスタム データベース エンジンを使用していましたが、新しいスクリプトは MySQL を使用していました。互換性を確保するために、開発者は MySQL データベースの文字セットと照合順序がそれぞれ UTF-8 と UTF-8_persian_ci に設定されていることを確認しました。
奇妙な動作
正しい文字セットと照合順序を設定したにもかかわらず、不一致が続いた。古いスクリプトでは引き続きペルシア語文字が正しく表示されましたが、新しいスクリプトでは依然として文字化けが表示されました。
根本原因: 接続ミス
問題をさらに詳しく調べた結果開発者は、古いスクリプトで使用されていたデータベース接続が Latin1 に設定されていたという、微妙だが重要な詳細を発見しました。この一見無害な設定は、データのエンコーディングに重大な影響を及ぼしました。
経緯
古いスクリプトを使用して最初にデータがデータベースに挿入されたとき、PHP はUTF-8 でエンコードされた文字列をデータベースに送信します。接続が Latin1 に設定されていたため、データベースはペルシア語文字を表すバイトを Latin1 値として解釈しました。その結果、文字は間違ったエンコーディングでデータベースに保存されました。
解決策: データベース変換
彫刻エラーを解決するには、開発者はデータを変換する必要がありました。データベース内のデータを正しい UTF-8 形式に変換します。これは、次の SQL ステートメントを使用して実現できます。
SELECT CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8) FROM table_name
変換が完了すると、ペルシア語文字は正しい UTF-8 エンコーディングでデータベースに保存されました。新しいスクリプトは、古いスクリプトの出力と一致して、データを適切に取得して表示できるようになりました。
以上が古いスクリプトから MySQL にデータを移行するとペルシア語文字が文字化けするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。