文字コードの違うDBの移行(latin1からUTF8へ)

Pocket

怒濤のDB移行シリーズ

前提

  • 移行もとはゴリゴリのlatin1
  • 移行先はUTF-8

dumpしてみる:character-setだけでいけたらいいよね編

  • default-character-set=latin1でdump
  • vim -c "e ++enc=latin1"で開いてSET NAMES utf8追加

リストアしたけど文字化けしたままだった。

dumpしてみる:nkfで文字コード変えてみようね編

  • default-character-set=latin1でdump
  • nkfでutf8に
  • sedでlatin1という表記をすべてutf8に変換(もしくはVimで:%s/[置換対象文字列/[置換文字列]/cgでもよい)

リストアしてみたら、vimで読めるようになったけどリストア時にエラーが出る

dumpしてみる:正解編

移行先はUTF8、移行元はlatin1だったけどサイトがEUC-JPで動いているサイトだったので、latin1のDBにEUC-JPのデータを保存しているという厄介きわまりない仕様だった。
DB移行の際にはどうやって保存されたデータなのかを確かめるべきである。
そもそもなんなのよlatin1て!と思いたくなるが、DBがlatin1だったというケースは往々にして遭遇してしまうものなので、今後もラテンのノリとはうまく付き合って行きたい。

  • default-character-set=latin1でdump
  • vimで内部のlatin1表記を全部ujisに変換
  • mysql内にujisでdatabase作成create database fp2 default character set ujis
  • ujis指定でインポート--default-character-set=ujisをつける

おまけ

移行したデータをCSVデータで吐き出したので、csvfile_sjisというディレクトリに全部保存して、Excelで開けるようにsjisの形式に変換してあげる

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です