トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

E71でのMySQL文字コード設定変更 の変更点

Top / E71でのMySQL文字コード設定変更

*E71でのMySQL文字コード設定変更 [#nd54e237]

MySQLの文字コード設定を変更します。

MySQLでは、
-データベースサーバの文字コード
-クライアントの文字コード
-データベース毎の文字コード
-テーブル毎の文字コード

を別々に設定することが出来ます。

***現在の文字コードの確認 [#b03da9f0]

まずは、現在の文字コード設定を確認します。

 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の変更 [#m113b7c4]
文字コードはmy.cnfで設定します。

my.cnfの[client]、[mysqld]の中に、以下の設定を追加します。&br;
※以下のサイトを参考にしました。
-http://www.avant-tokyo.com/linux/mysql_character_set.html 

 [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\'

よしよし、変更完了!

***動作確認 [#n242bc1c]

早速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になってる。