MySQLでmysqldumpを実行すると’ujius’という意味不明のエラー
未だにMySQLで文字コードをEUC-JPにして運用されているところも多いかと思いますが、文字コードを「ujis」にしているとデータベースデータをファイルに書き出す「mysqldump」コマンドにおいて奇妙な現象が起こってしまいました。
具体的には「ujius」という文字列を含んだエラーが出て実行できないという問題で、気持ち悪い現象なのですが、実際に起こったことなのでここで解決法も含めて報告しておきます。
エラー内容
root権限で以下のコマンドを実行したところ…
# mysqldump -u root -p --all-databases >fulldb.dump
次のようなエラーが出ました。
mysqldump: Character set 'ujius' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index.xml' file
うじうす? ゆーじうす? なんと読むのでしょうか。 「ujius」という文字コードは不明な文字コードですよ、と怒られました。 そんなの指定してませんって。
文字コードを再確認しても…
mysql> show variables like 'character_set%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | ujis | | character_set_connection | ujis | | character_set_database | ujis | | character_set_filesystem | binary | | character_set_results | ujis | | character_set_server | ujis | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
どこにも「ujius」という文字列はありません。
–default-character-set=binary オプションで解決
解決法は簡単で、オプションに「–default-character-set=binary」を加えるだけです。
これによって、書き出し時の文字化けも防ぐことができます。
# mysqldump -u root -p --all-databases --default-character-set=binary >fulldb.dump
「ujius」という奇妙な文字列については検索で調べてもキーワードがヒットしなかったので、同じ現象が発生する人はほぼいないのではないかと思いますが、とりあえずご報告まで。
余談ですが、今月号のWEB+DB PRESS Vol.54は「WEBサービス即日開発」や「MySQL無停止化計画(この特集でレプリケーションの実験をしていて今回のエラーに遭遇。笑)」「ActionScript3.0 ライブラリ大集合」など、すばらしい特集のオンパレードなので売り切れないうちに購入するのがオススメですよ。
2010-01-07