sql >> データベース >  >> Database Tools >> phpMyAdmin

MySQLはUTF-8PHPファイルでウエスタンエンコーディングを出力します

    mysqli_set_charsetを使用します 接続直後にクライアントエンコーディングをUTF-8に変更するには:

    $mysqli->set_charset("utf8");
    

    クライアントエンコーディングは、MySqlが入力を期待するもの(たとえば、ユーザーが入力したテキストを検索クエリに挿入する場合)であり、結果を提供するものです(したがって、echo 正しく表示するため)。

    上記の2つのシナリオを説明するには、ウェブページのエンコーディングと一致させる必要があります PHPソースファイルのエンコーディング(クエリのハードコードされた部分が正しく解釈されるようにするため)。

    更新:latin-1を使用して挿入されたデータをutf-8に変換する方法

    間違った接続エンコーディングを使用してすでに挿入されているデータに関しては、問題を解決するための便利な解決策があります。この種のデータを含む列ごとに、次のことを行う必要があります。

    ALTER TABLE table_name MODIFY column_name existing_column_type CHARACTER SET latin1;
    ALTER TABLE table_name MODIFY column_name BLOB;
    ALTER TABLE table_name MODIFY column_name existing_column_type CHARACTER SET utf8;
    

    プレースホルダーtable_namecolumn_name およびexisting_column_type 毎回データベースの正しい値に置き換える必要があります。

    これは何ですか

    1. MySqlにlatin1のその列にデータを格納する必要があることを伝えます。この文字セットにはutf8の小さなサブセットしか含まれていないため、通常、この変換にはデータの損失が伴いますが、この特定のシナリオでは、データは入力時にlatin1として既に解釈されているため、副作用はありません。ただし、MySqlは、データのバイト表現を内部的に変換して、PHPから最初に送信されたものと一致させます。
    2. 列をバイナリタイプに変換します(BLOB )関連付けられたエンコーディング情報がありません。この時点で、列には適切なutf8文字列である生のバイトが含まれます。
    3. 列を以前の文字タイプに変換し、生のバイトはutf8エンコーディングであると見なす必要があることをMySqlに通知します。

    警告:この無差別なアプローチは、問題の列にのみが含まれている場合にのみ使用できます。 誤って挿入されたデータ。正しく挿入されたデータは、ASCII以外の文字が最初に出現したときに切り捨てられます!

    したがって、PHP側の修正が有効になる前に、今すぐ実行することをお勧めします。



    1. phpMyAdminで読み取り専用ユーザーを作成する

    2. Microsoft SSMS構文が単語構成を強調するのはなぜですか?

    3. MySQLタイムスタンプ-なぜすべてゼロなのですか?

    4. TINYINT(1)がブール値として機能するのに、INT(1)は機能しないのはなぜですか?