問題
PHP / MySQL で日本語がうまくソートされない
原因
MySQL の文字コードの指定がされていない
対処法1 : 強引に charset を変更
$ cd /usr/share/mysql/charsets/
# cp latin1.conf ujis.conf
# chown mysql:root ujis.conf
- my.cnf の編集
# vi /etc/mysql/my.cnf
[client]
character-sets-dir=/usr/share/mysql/charsets
[mysqld]
default-character-set=ujis
[mysql]
default-character-set=ujis
結果
ダメ
# cp latin1.conf ujis.conf
あたりが強引すぎな気がする
ujis.conf ないかな?
対処法2 : SoftAgency のパッケージを利用する
/etc/apt/sources.listに以下を追加
deb http://www.softagency.co.jp/mysql/Downloads/woody mysql400/
deb http://www.softagency.co.jp/mysql/Downloads/sarge mysql/
を追加
インストール結果
# aptitude install mysql-server
依存関係問題でダメ
いったん remove
# aptitude remove mysql-server mysql-client mysql-common
# aptitude install mysql-server mysql-client mysql-common
インストール成功
しかし起動せず.
いったんあきらめ.
対処法3 : ソースから ujis.conf だけ抜こう
$ wget ftp://ftp.softagency.co.jp/mysql/tcx/Downloads/mysql-4.0.15.tar.gz
$ tar xzvf mysql-4.0.15.tar.gz
$ cd mysql-4.0.15/
$ ./configure --with-charset=ujis --with-extra-charsets=all
$ make
- 補足
euc-jp なら ujis
shift_jis なら sjis
と読み替えること
ujis.conf が見つからない
終了
対処法4 : もう一回 SoftAgency のパッケージの使用を試みる
/var/log/mysql/mysql.err を見ると /var/run/mysqld が無いとおこられていた.
# mkdir /var/run/mysqld
# chown mysql:mysql /var/run/mysqld
- 設定ファイルが2つ
/etc/mysql/my.cnf ではなく
/etc/my.cnf を変更しなくてはならない
どうやら mysql が unix socket しか open していないようなので
port = 3306 のコメントアウトを取り除く
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld]
default-character-set = ujis
port = 3306
socket = /var/run/mysqld/mysqld.sock
結果
起動成功.
日本語のソートも出来ている.
Reference
bin5.info - MySQL の勧め
http://bin5.info/useful/php/mysql_01.html
MySQL Reference Manual for version 4.0.12. - 4 データベース管理
http://www.mysql.gr.jp/jpdoc/4.0/manual.ja_MySQL_Database_Administration.html#Character_sets
Soft Agency - 実践MySQL / なにから手をつけましょう?
http://www.mysql.jp/mysql/TIPS/begin.html
Soft Agency - 実践MySQL / MySQLのクライアント
http://www.mysql.jp/mysql/TIPS/clients.html
Soft Agency - 実践MySQL / MySQLの日本語文字コード対応
http://www.mysql.jp/mysql/TIPS/jp.html
Soft Agency - MySQL 日本語バイナリ
http://www.mysql.jp/mysql/bin/
たぐちさんぷろじぇくと - postfixのエラー (mysql が unix socket のみを listenしていた)
http://www.taguchi.org/