[前][次][番号順一覧][スレッド一覧]

mysql:15410

From: HIRATSUKA Sadao <HIRATSUKA Sadao <hiratsuka.sadao@xxxxxxxxxx>>
Date: Fri, 01 Oct 2010 13:27:07 +0900
Subject: [mysql 15410] Re: 複数の文字コードが混在している時のmysqldump の文字コード指定

ひらつかです。

On Thu, 30 Sep 2010 19:21:12 -0700
Yukio Kinoshita <inahou@xxxxxxxxxx> 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@xxxxxxxxxx



[前][次][番号順一覧][スレッド一覧]

     15406 2010-09-30 14:04 [inahou <inahou@xxxxx] 複数の文字コードが混在している時のmysqldump の文字コード指定
     15407 2010-10-01 04:42 ┗[inahou <inahou@xxxxx]                                       
     15408 2010-10-01 09:32  ┗[HIRATSUKA Sadao <hir]                                     
     15409 2010-10-01 11:21   ┗[Yukio Kinoshita <ina]                                   
->   15410 2010-10-01 13:27    ┗[HIRATSUKA Sadao <hir]                                 
     15411 2010-10-02 05:14     ┗[Yukio Kinoshita <ina]