MySQL で、キャラクタセットを指定してデータベースをインポートする方法

MySQL で、データベースをテキストデータにエクスポート(バックアップ)する方法は、mysqldump コマンドを使えばよい。以下のようにする。
# mysqldump -u root -p your_database_name > your_database_name.sql
さて、これを元に戻すときに、
# mysql -u root -p your_database_name < your_database_name.sql

※ your_database_name というデータベースの中身は空であること。
のようにすれば簡単にインポートできるのだが、エクスポート/インポートするそれぞれのマシンで違う設定の MySQL が動いていたりすると、インポートしてみたらデータが文字化けしてた・・・なんてことが実際にあった。 your_database_name.sql のキャラクタセットは UTF8 で書き出されているのに、単純に mysql コマンドでインポートしただけでは文字が化けてしまう。 まずはインポートする方のマシンの MySQL のキャラクタセットの設定を調べてみよう。コンソールから mysql コマンドでmysql にログインして、以下のコマンドを実行する。
mysql> <strong>SHOW VARIABLES LIKE 'character_set%';</strong>
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
おやおやデフォルトがほとんど latin1 になっている。これでは utf8 で読み込んでくれそうにもない。そこで、
  • 解決方法その1 以下のように --default-character-set=utf8 などと文字コード(キャラクタセット)を指定する。
    # mysql -u root -p <font color="red"><strong>--default-character-set=utf8</strong></font> your_database_name < your_database_name.sql
  • 解決方法その2 ほかにも phpMyAdmin からファイルをアップロードし、その際に文字コードを UTF8 にしてあげればよさそう。だけどこの方法だとアップロードのファイルサイズに制限があると少し大きめのデータベースのインポートは NG だ。root になれるなら、ファイルサイズの制限は php.ini の
    php_value upload_max_filesize <font color="red"><strong>2M</strong></font>
    赤色部分を次のように修正するといいらしい。
    php_value upload_max_filesize <font color="blue"><strong>8M</strong></font>
  • 解決方法その3 root になれるなら MySQL のデフォルト文字コードを UTF-8 に変更する。 /etc/my.cnf か /etc/mysql/my.cnf を開き(ない場合は mysql が起動するときの設定ファイルを探す)、MySQLのデフォルト文字コードを UTF-8 に変更する。
    # vi /etc/my.cnf

    [mysqld]
    default-character-set = utf8

    [mysql]
    default-character-set = utf8

    [mysqldump]
    default-character-set = utf8
トラックバック URL: https://perltips.twinkle.cc/trackback/151