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

これは、MySQLテーブルをlatin1からutf-8に変換する安全な方法ですか?

    考慮すべき3つの異なるケースがあります:

    値は実際にLatin1を使用してエンコードされています

    これは一貫したケースです。宣言された文字セットとコンテンツエンコーディングが一致します。これは私が最初の答えでカバーした唯一のケースでした。

    提案したコマンドを使用します:

    ALTER TABLE tablename CONVERT TO CHARSET utf8 COLLATE utf8_bin
    

    CONVERT TO CHARACTER SETに注意してください コマンドはMySQL4.1.2でのみ表示されたため、2005年より前にインストールされたデータベースを使用する場合は、エクスポート/インポートのトリックを使用する必要がありました。これが、インターネット上に非常に多くのレガシースクリプトとドキュメントが古い方法でそれを行っている理由です。

    値はすでにutf8を使用してエンコードされています

    この場合、mysqlにデータを変換させたくないので、列のメタデータを変更するだけで済みます。

    このためには、最初にタイプをBLOBに変更し、次に各列のTEXT utf8に変更して、値の変換が行われないようにする必要があります。

    ALTER TABLE t1 CHANGE c1 c1 BLOB;
    ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8
    

    これは推奨される方法であり、Alterに明示的に文書化されています。テーブル構文のドキュメント

    値は別のエンコーディングで使用されます

    一部のLinuxディストリビューションでは、デフォルトのエンコーディングは数年間Latin1でした。この場合、次の2つの手法を組み合わせて使用​​する必要があります。

    • BLOBタイプのトリックを使用して、テーブルのメタデータを修正します
    • CONVERT TOを使用して値を変換します 。


    1. .NET / SQLのテーブル名をパラメータ化しますか?

    2. MySQL-エラーコード1215、外部キー制約を追加できません

    3. SQL Serverの問題を数分で検索、優先順位付け、および解決

    4. mysql用の複数のDockerコンテナ、または複数のデータベースを持つ1つのインスタンス