2011-01-31 12 views
3

私は最近、大きな誤りを犯し、フロントエンドでUTF-8で、DBサイドでlatin1にエンコードしたことに気付きました。latin1エンコーディングからUTF-8にMySQLを変更

私は自分のMySQLデータベースをUTF-8に切り替えることを考えています。このような手続きを行う「良い練習」はありますか?私が取ることができるすべての推奨される手順は?私が注意しなければならない落とし穴は何ですか?

は、主要な(最も一般的)な落とし穴がALTER DATABASE … DEFAULT CHARACTER SETALTER TABLE … DEFAULT CHARACTER SETは、既存の列のエンコーディングを変更することを望んでされるだろう。ありがとう、 アレックス

答えて

5

これらの文は、これらの文を発行した後に作成された表と列にのみ影響します。

あなたは私のブックマークからこれを見つけた

ALTER TABLE mytable CONVERT TO CHARACTER SET UTF8; 
+1

は、すべての非ラテン文字を駄目にするでしょうか? –

+1

@ColShrapnel: 'latin1'カラムに入る方法が見つかったのは間違いありません。 'Latin1'は' UTF8'のサブセットです。 – Quassnoi

+0

いいえ、それはAFAIKではありません。実際にlatin1テーブルに任意の文字を格納することができます。 –

3

私は不足しているエンコーディングでダンプを使用して(それは私ではないのですが、私はからこれを取得する場所私は忘れて)インターネットで1つのトリックを発見し、:それは少し古いですが、まだあなたのニーズを、スイートかもしれませんその "ブランク"ダンプをもう一度適切なエンコーディングで再インポートしてください。

テーブル内のすべてのデータが実際に正しいエンコーディング(再インポート用)になっている場合にのみ役立ちます。 データが失われた場合、最初の不正なエンコーディング文字の後にすべてのフィールド値が切り捨てられます。

私はß文字のためにこれを手に入れました。まだその周りに方法が見つかりませんでした。私が思うに、「worng文字を無視する」または類似のようなものでなんとかする必要があります...(Linuxシェル用)、UTF-8エンコードされたコンテンツをlatin1の中のMSSQLテーブル用

例の手順は次のとおりです。

mysqldump --opt --quote-names --skip-set-charset --default-character-set=latin1 mydatabase > /tmp/dump.sql 
mysql --default-character-set=utf8 mydatabase < /tmp/dump.sql 
関連する問題