サーバAでmysqldumpしたデータをサーバBにインポートしたところ、文字化けしているのでこれをなんとかしたい。
MySQLのcharactersetの設定がlatin1なのに、データはutf8というのが問題らしいことはわかっている。
まず環境。サーバA。
OS: Ubuntu 7.04 Server
MySQL: 5.0.38
mysql> status; -------------- mysql Ver 14.12 Distrib 5.0.38, for pc-linux-gnu (x86_64) using readline 5.2 Connection id: 1193592 Current database: database Current user: user@localhost SSL: Not in use Current pager: less Using outfile: '' Using delimiter: ; Server version: 5.0.38-Ubuntu_0ubuntu1.4-log Ubuntu 7.04 distribution Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: latin1 Conn. characterset: latin1 UNIX socket: /var/run/mysqld/mysqld.sock Uptime: 108 days 14 hours 27 min 32 sec Threads: 21 Questions: 115609420 Slow queries: 8 Opens: 146147 Flush tables: 1 Open tables: 64 Queries per second avg: 12.321 --------------
mysql> show variables like 'char%'; +--------------------------+----------------------------+ | 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)
サーバB。
OS: Ubuntu 7.10 Server
MySQL: 5.0.
mysql&t; status; -------------- mysql Ver 14.12 Distrib 5.0.45, for pc-linux-gnu (x86_64) using readline 5.2 Connection id: 669 Current database: database Current user: user@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.0.45-Debian_1ubuntu3.3-log Debian etch distribution Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /var/run/mysqld/mysqld.sock Uptime: 1 day 5 hours 38 min 22 sec Threads: 4 Questions: 3166075 Slow queries: 2 Opens: 608 Flush tables: 1 Open tables: 64 Queries per second avg: 29.672 --------------
mysql> show variables like 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.09 sec)
サーバBは、/etc/mysql/my.cnfで
[mysqld] default-character-set=utf8 skip-character-set-client-handshake [mysql] default-character-set=utf8
と設定している。
まず、サーバAからmysqldumpするとき--default-character-set=latin1を指定する。
$ mysqldump --default-character-set=latin1 -u user -p database > db.dump
db.dumpを開き、
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
となっている部分を
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
にする。
サーバBにインポートする。
$ mysql -u user -p database < db.dump
これにて問題解決。
ヽ( ・∀・)ノくまくまー(2006-10-11)を参考にしました。
専用サーバへ移転準備中。
CMSは引き続きDrupalとWordPressを使うことになると思うけど、自作アプリはPHPからPython(django)へ。
環境は
Ubuntu 7.10 (専用サーバで選択できるUbuntuのバージョンが7.10のため)
mysql, apache, djangoはaptでインストール。
で、早速djangoでアプリを作っているのだけどdbへ日本語を含むデータをインサートしようとするとエラーに。
なもんで、mysqlの設定を変更。
[mysqld] default-character-set=utf8 skip-character-set-client-handshake [mysql] default-character-set=utf8
で、mysqlを再起動。
$ sudo /etc/init.d/mysql restart
PHPやApache、MySQLがパックになったXAMPP(apache friends - xampp for linux)は知っていたけど、WampServerなるものが。
Install PHP 5 Apache MySQL on Windows : WampServer
Windows用のPHP、Apache、MySQLが同梱されている。
この他、Solaris用のSAMP(Sun Optimized AMP Stack for the Solaris 10 OS)とか、Mac OS X用のMAMP(living-e AG: MAMP - Mac - Apache - MySQL - PHP)というのもあるんだとか。
Xlink KaiでMHP2をプレイ中、Ubuntuがハング。
VMware PlayerのゲストOSであるWindows 2000がハングするならわかるけど、ホストOSまでもが。。。
原因は不明だけど、やはりXlink Kai絡みかな。
リセットして再起動。
特に問題ないようだけど、自作のプログラムの挙動がおかしい。
どうもMySQL絡みのようだ。
MySQL AB :: MySQL 5.0 Reference Manual :: 4.5.3 mysqlcheck — A Table Maintenance and Repair Programあたりを読んで修復作業。
$ mysqlcheck --check-upgrade --all-databases --auto-repair -u username -p