ウェブ、ショウジン

Ubuntu Server 10.04におけるMySQLの文字コードの変更(文字化け解消)

2009-8-14
Category
MySQL

MySQLにおけるデフォルトの文字コードの変更の仕方はもうクリアしたと思っていたけれど、完全ではなかったようなので、あらためて確認しつつ以下にメモ。

追記:2011/11/02
最近さくらVPSに入れたUbuntu 10.04 では、設定ファイル(/etc/mysql/my.cnf)がなんか違っていたので、この場合(Ubuntu 10.04)の設定も追記しておく。

MySQLは
5.1.41-3ubuntu12.10 (Ubuntu)

/etc/mysql/my.cnfの
[mysqldump]の上あたりに以下を追加。

default-character-set = utf8
skip-character-set-client-handshake
init_connect = "SET NAMES utf8"

設定を反映させるためにmysqlを再起動。

$ sudo /etc/init.d/mysql restart

mysqlモニターで再度文字コードを確認してみる。

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.00 sec)

オーケー。

2011/11/02 追記ここまで。

Ubuntu 9.0.4 Server
MySQLはServer version: 5.0.75-0ubuntu10.2 (Ubuntu)

utf8に設定したい場合

文字化けする駄目な例(statusで表示したものの中から必要な部分だけ抜粋)

mysql> STATUS;
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1

utf8にしたときの正しい例(statusで表示したものの中から必要な部分だけ抜粋)

mysql> STATUS;
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8

そして、こうなっていれば大丈夫。

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/ |
+--------------------------+----------------------------+

MySQLの設定ファイル「my.cnf」を、以下のように編集する。(my.cnfの場所は、Ubuntu 9なら/etc/mysql/my.cnf)

[client]のブロックに
default-character-set=utf8

[mysqld] のブロックに
default-character-set=utf8
skip-character-set-client-handshake
を追記。

[mysql.server]
user=mysql
default-character-set=utf8
を適当な場所に追加。

[mysqld_safe] のブロックに
default-character-set=utf8
を追記。

[mysql] のブロックに
default-character-set=utf8
を追記。

[mysqldump] のブロックに
default-character-set=utf8
を追記。

[mysqld] ブロックの
language = /usr/share/mysql/english
の english を japanese に変更。

my.cnfを変更したら、変更内容を反映させるためにMySQLを再起動。

$ sudo /etc/init.d/mysql restart

確認してみると

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/ |
+--------------------------+----------------------------+

オーケー、大丈夫。

この設定は新しくデータベースを作成すると、それ以降反映される。

設定の変更前に存在しているデータベースの文字コード設定は変わらない。(文字コードの設定はデータベースごとに持っているので)

新しくデータベースを作成して日本語データをinsertしてみた。オーケー。解決。

Categories

Tag Cloud

AdMob Android Apache centos CodeIgniter EC-CUBE facebookアプリ facebookページ feed Firefox Flash google googleanalytics htaccess iPad iPhone JavaScript lamp mobile nginx ogp pear php plugin rollover rss sendmail setting smarty ssh Titanium Mobile Titanium Studio tutorial ubuntu vim VirtualBox vmware vps Windows WordPress xampp youtube さくらインターネット アクセス解析 カスタム投稿