E71でのMySQL文字コード設定変更
Last-modified: 2013-08-24 (土) 02:14:21 (3753d)
Top / E71でのMySQL文字コード設定変更
E71でのMySQL文字コード設定変更 †
MySQLの文字コード設定を変更します。
MySQLでは、
- データベースサーバの文字コード
- クライアントの文字コード
- データベース毎の文字コード
- テーブル毎の文字コード
を別々に設定することが出来ます。
現在の文字コードの確認 †
まずは、現在の文字コード設定を確認します。
mysql> show variables like 'character_set%'; character_set_client', 'utf8' character_set_connection', 'utf8' character_set_database', 'latin1' character_set_filesystem', 'binary' character_set_results', 'utf8' character_set_server', 'latin1' character_set_system', 'utf8' character_sets_dir', 'c:\mysql\share\charsets\'
なるほど~クライアント側の設定はutf8で、サーバ、DBがlatin1なのね。
これだと、日本語が入らないので、サーバ、DBの文字コードをutf8に変更します。
ちなみに、データベースのcreate文を見ることで、作成時の文字コードを確認します。
mysql> show create database test_db; 'test_db', 'CREATE DATABASE `test_db` /*!40100 DEFAULT CHARACTER SET latin1 */'
これで今のデータベースの
my.cnfの変更 †
文字コードはmy.cnfで設定します。
my.cnfの[client]、[mysqld]の中に、以下の設定を追加します。
※以下のサイトを参考にしました。
[client] default-character-set=utf8 [mysqld] default-character-set = utf8 skip-character-set-client-handshake character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8
設定を変更し、サーバを再起動し、文字コードを再び確認。
mysql> show variables like 'character_set%'; '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', 'c:\mysql\share\charsets\'
よしよし、変更完了!
動作確認 †
早速DBに接続し、日本語を入れてみる。
mysql> insert into test values( '太郎', 'taropass'); Incorrect string value: '\xE5\xA4\xAA\xE9\x83\x8E' for column 'user' at row 1
あれ?エラーがでた。
とりあえず、このテーブルの文字コードを確認
mysql> show create table test 'test', 'CREATE TABLE `test` ( `user` char(20) default NULL, `passwd` char(20) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1'
ほうほう、CHARSETがlatin1なのね。なるほど。じゃあ、変更してみよう。
と思ったんだけど、ちょっとめんどくさかったので、後回し。
新しいテーブルを作成してみて試してみます。
まずは、テーブルを作成。このときに、特に文字コードは指定せず。
CREATE TABLE `board` ( `user` char(50) default NULL, `comment` text(512) default NULL )
テーブルを作ったら、早速日本語をinsert
insert into board values ('太郎','hello');
insertが成功したら、select
select * from board; '太郎', 'hello'
成功!
ちなみに、このテーブルのcreate文は以下のとおり。
show create table board; 'board', 'CREATE TABLE `board` ( `user` char(50) default NULL, `comment` text ) ENGINE=MyISAM DEFAULT CHARSET=utf8'
よしよし、ちゃんとutf8になってる。