sql >> データベース >  >> RDS >> Mysql

複数の言語からデータを読み取るときにジャンク/ガベージ文字を回避するにはどうすればよいですか?

    グジャラート語はરેલવેを開始します 、 正しい?そして、マラヤーラム語はനേപを開始します 、 正しい?そして、英語にはBureau’sが含まれているはずです。 。

    これは

    の典型的なケースです
    • クライアントにあるバイトはutf8で正しくエンコードされています。 (Bureau utf8のAscii/latin1サブセットでエンコードされます。しかし、 アスキーアポストロフィではありません。)
    • SET NAMES latin1に接続しました (またはset_charset('latin1') または...)、おそらくデフォルトで。 (utf8である必要があります 。)
    • テーブルの列はCHARACTER SET latin1として宣言されました 。 (または、テーブル/データベースから継承された可能性があります。)(utf8である必要があります。 。)

    データの修正 は「2ステップALTER」です。

    ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
    ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
    

    ここで、長さは十分に大きく、他の「...」には他のものがあります(NOT NULL 、など)はすでに列にありました。

    残念ながら、処理する列が多い場合は、多くのALTERが必要になります。 MODIFYを実行できます(実行する必要があります)。 VARBINARYに必要なすべての列 ALTERsのペアの単一のテーブルの場合 。

    コードの修正 接続としてutf8を確立することです。これは、PHPで使用されるAPIによって異なります。 ALTERs 列の定義を変更します。

    編集

    VARCHARがあります 間違ったCHARACTER SET 。したがって、રેલのような文字化けが表示されます 。ほとんどの変換手法は、રેલを保持しようとします 、しかしそれはあなたが必要とするものではありません。代わりに、VARBINARYへのステップを踏みます latin1でエンコードされた文字を表すビットの古い定義を無視しながら、ビットを保持します。 2番目のステップでもビットは保持されますが、utf8文字を表すと主張しています。




    1. MySQL行からのデータの乗算

    2. MariaDB JSON_CONTAINS()の説明

    3. モデルなしでRailsアプリからMySQLデータベースをクエリするにはどうすればよいですか?

    4. MySQLWorkbenchをフェッチしています...-DBを参照できません