mysql

mysqlの文字化け

サーバ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)を参考にしました。

Ubuntu 7.10 + djangoで文字化け

専用サーバへ移転準備中。
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

WampServer

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)というのもあるんだとか。

MySQLでテーブル チェックと修復

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
コンテンツの配信