2017年11月 / 10月≪ 123456789101112131415161718192021222324252627282930≫12月

インフォメーション

FC2ブログで画像等を一括アップロードするソフトを地味に配布してます。
FC2ブログ用ファイルアップロードの最新版はこちら
(ベクター)FC2ブログ用ファイルアップロード

--.--.-- (--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


 |  --:--  |  スポンサー広告  |  Top↑

2010.10.30 (Sat)

mysqldumpで文字コードの違いに困った

レンタルサーバーのmysqlデータ(latin1)をローカルのmysql(utf8)に突っ込みたい。
そのまま突っ込むと謎文字の羅列になったり、SET NAMES utf8;してもハテナまみれになったりと困った。

うちの環境では最終的に
# mysqldump -u user -p --databases mydb --default-character-set=latin1 --quote-names > mydb.dump

で文字コードをlatin1で指定して出力し、
windowsにmydb.dumpをダウンロードして
テキストエディタでエンコードをutf-8に変換して保存。
念のため改行もlfをcrlfに変換した。
C:\> mysql -u user --default-character-set=utf8 < mydb.dump

という感じでutf8を指定してインポート。
これで今回の文字化けは回避でき、日本語もutf8でちゃんと入った。


mydb.dumpファイル内の先頭にSET NAMES utf8;を入れてもなぜかDBがlatin1で作成されてしまい、はまっていた。
いろいろ四苦八苦した結果、 --default-character-set=utf8で指定したらちゃんとDBがutf8で作成されたので解決。
なんでSET NAMES utf8がダメで--default-character-set=utf8だとOKなのかはよくわからない。

mysqldumpで使ってるオプションめも
-u ユーザー
-p パスワード。後続にパスワードを入力しない場合、エンター後に入力要求される。
--databases [db名] create database文が追加されるので指定してる。データベースを複数指定できたりする。
--default-character-set 保存時の文字コード指定。指定しないとデフォルトではutf8になるらしいので、違う場合は文字化けに。
--quote-names または -Q テーブル名、カラム名をバッククオートで囲む。あったほうが安心だと思う。DB名は囲まれない。


ちなみに--default-character-set=binaryでダンプしようとしたら
mysqldump: Character set 'binary' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index' file

なんてエラーが出た。
binaryなんて'/usr/share/mysql/charsets/Index'にはねえですよってこと?
ためしにそのファイルを見てみる。
# cat /usr/share/mysql/charsets/Index
# sql/share/charsets/Index
#
# This file lists all of the available character sets.


big5 1
czech 2
dec8 3
dos 4
german1 5
hp8 6
koi8_ru 7
latin1 8
latin2 9
swe7 10
usa7 11
ujis 12
sjis 13
cp1251 14
danish 15
hebrew 16
# The win1251 character set is deprecated. Please use cp1251 instead.
win1251 17
tis620 18
euc_kr 19
estonia 20
hungarian 21
koi8_ukr 22
win1251ukr 23
gb2312 24
greek 25
win1250 26
croat 27
gbk 28
cp1257 29
latin5 30

確かに無いな。無いからといってこれ以上どうしたらいいのかもわからないのであきらめる。
バイナリってことは大体このなかのどれかだし、
mysql > show variables like "char%";


| character_set | latin1

って出たのでlatin1だってわかったのでそこはそんなに問題なかった。


その他テスト用に使ったmysqldumpコマンド

DBとテーブル構造だけ。データ無しダンプ
mysqldump -u user -p -Q --default-character-set=latin1 --no-data --databases mydb > mydb_nodata.dump

テーブル1個だけ、drop付きダンプ
mysqldump -u user -p -c --default-character-set=latin1 --add-drop-table mydb usertable > mydb_usertable.dump

-c, --complete-insert 完全な挿入ステートメント(カラム名も指定)を使用する。

MySQL :: MySQL 4.1 リファレンスマニュアル :: 4.9.7 mysqldump(テーブル構造とデータのダンプ)


 |  17:36  |  パソコン  |  トラックバック(1)  |  コメント(0)  |  Top↑

Comment

コメントを投稿する

URL
コメント
パス  編集・削除するのに必要
非公開  管理者だけにコメントを表示
 

Trackback

この記事のトラックバックURL

この記事へのトラックバック

必然的に勝ち続けるロジックを知っていますか?

FXや投資の経験がなくても1日10分の投資時間しかなくても3000円を1年間で1000万円にしたバイナリオプション取引をあなたも再現したくありませんか?
2011/10/26(水) 06:45:57 | ミリオンバイナリとは?
 | BLOGTOP | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。