MySQLのcharset変更 MySQLのcharsetをutf8に変更する方法

MySQLのcharsetをutf8に変更する

PHPとMySQLの勉強をするために、手持ちのPCでXAMPP環境をインストールするまではよかったが、MySQLで日本語が正しく表示できるようにするため手こずりました。

同じようにハマる人が出てこないよう、手順をまとめます。

・XAMPP for Windows 1.6.4
・MySQL 5.0.45(XAMPP for WindowsのWebページには5.0.51と書いてあるのだが・・・)
・WindowsXP HomeEdition SP2

ふつうにXAMMPのインストーラでデフォルト設定のままインストール。

この状態でMySQLを起動すると
Image1.png
となり、みごとにdefault_charsetはlatin1になります。

これはMySQLのバイナリ作成時にこの設定になっていたのでしょうがないでしょう。
これをuft8にしていきます。

MySQLのcharsetをutf8にする方法

XAMPP環境の場合、MySQLはデフォルトでC:\XAMPP\MySQLにインストールされます(以下、%MySQL%)。

%MySQL%下にmy.cnfというファイルがあります。
アイコンがImage2.pngなやつです。

#拡張子が表示されません。

これをテキストエディタで開いてやります。
まず[mysqld]の部分を変更します。

# The MySQL server
[mysqld]
basedir="C:/xampp/mysql"
tmpdir="C:/xampp/tmp"
datadir="C:/xampp/mysql/data"

port = 3306
socket = mysql

old-passwords
character-set-server = latin1
collation-server = latin1_general_ci


このcharacter-set-serverとcollation-serverをコメントアウトし、default-character-set=utf8とskip-character-set-client-handshakeを加えてやります。

# The MySQL server
[mysqld]
basedir="C:/xampp/mysql"
tmpdir="C:/xampp/tmp"
datadir="C:/xampp/mysql/data"

port = 3306
socket = mysql

old-passwords

#character-set-server = latin1
#collation-server = latin1_general_ci

default-character-set=utf8
skip-character-set-client-handshake



ちなみにcharacter-set-serverはデフォルトの文字コードを、collation-serverは、サーバのデフォルト照合順序を指定するものです。

default-character-set=utf8はデフォルトの文字コードをutf8に指定し、skip-character-set-client-handshakeは「余計なことはするな」(^^;という指定です。

mysqldだけではcharsetのutf8への変更は終わらない

さて、次にmy.cnfの他のdefault-charactersetも指定しないといけません。


[mysqldump]
quick
max_allowed_packet=16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

これには、さっきと同じdefault-character-set=utf8を加えてやるだけです。


[mysqldump]
quick
max_allowed_packet=16M
default-character-set=utf8

[mysql]
no-auto-rehash
default-character-set=utf8
# Remove the next comment character if you are not familiar with SQL
#safe-updates


これでMySQLを再起動しましょう。

MySQLのcharsetがどうなったか確かめよう

それでは、MySQLを再起動して、DATABASE hogeを作ってみましょう。
デフォルトのcharsetutf8にしてるので、すべてのcharactersetがutf8になっています。

Image3.png
これで一安心。

さっそく、テーブルを作ってみましょう。
IDと名前と年齢だけの簡単なテーブルを作り、出席番号1番、山田太郎君、17歳をINSERTしてみましょう。

Image4.png

あれ、肝心の名前が入ってない??

MySQLがやっと日本語を認識してくれた!

おかしい!charactersetもちゃんとutf8になってるのに、肝心の日本語が出ない。

と、かなりあせったのですが、もうひとつおまじないがいるようです。

Windowsが使っている日本語文字コードは、一般的にはsjisといわれていますが、正確にはcp932です。マイクロソフト様が勝手にsjisを拡張してくださっているのです。

当然、Windowsのコマンドプロンプトでクエリを送っているので、それに合わせてやらないといけません。

そのおまじないが、SET NAMES cp932;です。
これを実行してから、もう一度INSERTをしてみましょう。

Image5.png

今度こそバッチリですね。
これでようやく安心してMySQLで日本語が使えるようになりました。

ちなみにrootのパスワードの変更は、

# bin/mysqladmin -u root password hoge

でできます。linuxだとどうなのか知りませんが、Windowsでパスワードを''で囲むと、''もパスワードだと見なされてしまいます。注意しましょう。

基礎からのMySQL現場で使えるMySQL詳解MySQL

スポンサードリンク


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。