2010年10月 1日

[mysql 15410] Re: 複数の文字コードが混在している時のmysqldump の文字コード指定

ひらつかです。

On Thu, 30 Sep 2010 19:21:12 -0700
Yukio Kinoshita <inahou@xxxxx> wrote:

> > sjisのテーブルにどのようにしてこれらのデータを入れましたか?
> まず、(波線、表、まるいち、はしごだか)を秀丸エディタにて、Shift_JIS、EUC、UTF-8 にて保存。
> 以下のコマンドにて、インサートしました。

> # mysql test -e "insert into t_sjis values('`cat sjis.txt`');"
> --default-character-set=sjis

なるほど、入りました。


> やっぱり複数文字コード混在環境では、mysqldump は
> --default-character-set=binary を付けるしかないんですね。

お作法としては

・丸付き数字などを使う場合は
sjis、ujisは使わず、cp932、eucjpms、utf8を使う

・混在環境では --default-character-set=utf8 でdump/restoreする

ということになると思います。
cp932のテーブルをutf8でdumpするパターンはうまくいっていますね。


> binary にして問題が無いと仮定すると、そもそもmysqldumpに
> 文字コード指定オプションがあること自体
> 意味がわからなくなってきました。

binaryでとった場合、dumpファイルをエディタで開いたときに
よほど器用なエディタでない限り、一部は読めて、一部は読めない
という状態になると思います。


> 文字コード毎に、mysqldump を分けて実行するしかないのでしょうか。

今回はsjis、ujisのテーブルに本来入れてはいけない文字を入れた
という状況ですので、お作法で述べた「utf8に変換して全部まとめて
dumpする」ということができません。(utf8に変換できない不正な文字がある)

そのため、キャラクタセットごとに分けて実行するのがよいと思います。
念のためですが、mysqldumpはテーブル指定でのdumpが取れるので

mysqldump --default-character-set=sjis [database名] [sjisのテーブル名]
mysqldump --default-character-set=ujis [database名] [ujisのテーブル名]

とします。

--
平塚貞夫 hiratsuka.sadao@xxxxx


投稿者 xml-rpc : 2010年10月 1日 13:27
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/98777
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。