ホームページ  >  に質問  >  本文

mysqli set_charset() の正しい使用法

正しい使い方について質問があります $mysqli->set_charset()。私は自分のウェブサイトでこの機能を何年も使っていません。今、接続スクリプトを書き直していて、$mysqli->set_charset() が正しく適用されるようにしたいと考えています。現在、サイトはまだ "latin1" に基づいています (ただし、すぐに UTF-8 (utf8mb4) に切り替える予定です。)

私のサーバー (私が管理している) 上の MySQLi は、長年 latin1 構成を使用しています。これを今追加しても問題ないと思います $mysqli->set_charset("latin1")?

MySQLi がデフォルトで utf8mb4 として設定されている場合、$mysqli->set_charset() 関数を使用しないと、Web サイトに奇妙なエンコードされた文字が表示されますか?

自分の仮説を確認したいです。

P粉908643611P粉908643611306日前348

全員に返信(1)返信します

  • P粉674999420

    P粉6749994202024-01-11 15:16:05

    mysqli::set_charset() 接続の 文字セットを設定します。つまり、「この接続経由で送信するすべての文字列は this > エンコーディングを使用します。私もコーディングを再開したいです。」これを、PHP 側で使用しているエンコーディングと一致させる必要があります。

    つまり、現在の設定が間違っている場合でも、現在の値を変更するとデータが破損する可能性があります。これは、データベースからデータベースへの転送中に破損したデータが、設定が一貫している限り同じように破損する場合があるためです。

    変更を加える前に、現在使用されているエンコーディングと、データベース内のデータが破損していないかどうかを確認する必要があります。そこから、すべてのエンコードが一致していること、データがすべてのステップで正しくエンコードおよび処理されていること、および既存のデータが修復されていることを確認するためのパスをグラフ化できます。

    いつものように、メイン投稿を参照してください: UTF-8 全体を通して

    その他の考え:

    • 文字列エンコーディングは通常、検出できません。これはメタデータであり、個別に追跡する必要があります。
    • latin1
    • 実際には ISO-8859-1 ですが、リテイナーの 8X および 9X バイト範囲に余分な記号 (具体的には €) を埋め込む邪悪なツイン cp1252 であることに注意してください。 ###参照する######

      返事
      0
  • キャンセル返事