読者です 読者をやめる 読者になる 読者になる

ITの隊長のブログ

ITの隊長のブログです。いや、まだ隊長と呼べるほどには至っていないけど、日々がんばります。CakePHPとPlayFrameworkを使って仕事しています。最近はAngular2をさわりはじめたお(^ω^ = ^ω^)

mysqlでの文字コード関連がわかってなくてワロタ

MySQL

スポンサードリンク

http://www.flickr.com/photos/91795203@N02/14522157584
photo by xmodulo



前回のブログでもらったコメントから、文字コード関連全然わかんなかったのね(´・ω・`)ショボーン


と、思ったので、調べ&試してみました。( ..)φメモメモ


環境について

Server version: 5.6.16 MySQL Community Server (GPL)

使用できる文字コードについて


使える文字コードについては下記コマンドで確認することができます。

mysql> show character set;
〜省略〜
| utf8     | UTF-8 Unicode               | utf8_general_ci     |      3 |
〜省略〜


一番左のカラムの文字がコマンドで使える文字になります。(utf-8'utf8'、shift-jis ⇒ 'sjis'って感じかね)

文字コードの設定を確認する


動作しているmysqlにて、確認するコマンドを実行し、デフォルトの文字コードを確認します。

# MySQL自体の文字コード確認
mysql> status;
〜省略〜
Server characterset:	latin1
Db     characterset:	latin1
Client characterset:	utf8
Conn.  characterset:	utf8
〜省略〜


# データベースの文字コード確認
mysql> show create database db_name;
+----------+--------------------------------------------------------------------+
| Database | Create Database                                                    |
+----------+--------------------------------------------------------------------+
| db_name  | CREATE DATABASE `db_name` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+--------------------------------------------------------------------+
1 row in set (0.00 sec)


# テーブルの文字コード確認
mysql> show create table table_name \G
*************************** 1. row ***************************
       Table: table_name
〜省略〜
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

データベース&テーブル構築時に文字コードを設定


データベースとか、テーブルを"create"するときに、文字コードを設定するコマンドです。

# データベース
mysql> create databases ${データベース名} character set 'utf8';

# テーブル
mysql> create table ${テーブル名} (id ..., value ...) character set 'utf8';

データベース&テーブル構築した後に、文字コードの設定を変更する。


これは今日までわからなかったことですね。これまではテーブルやデータベース構築後は変更できないと思っていましたが、追加、修正のコマンド"alter"で、できるっぽいです。便利!

# データベースの文字コードを修正する。
mysql> alter database db_name default character set utf8;

# テーブルの文字コードを修正する。
# 2015/06/19 追記 :久々に試していると何故か下記コマンドではどうさしなかったので修正
# mysql> alter table table_name character=utf8;
mysql> alter table table_name character set utf8;


ちなみに、データベースの文字コードを変更した場合、中にあるテーブルの文字コードの設定は変更しません。あくまで、デフォルトの文字コードが変更になるだけって感じらしいですね。


また、運用中に文字コードを変更した場合、文字種によっては文字化けすると思いますので、バックアップをしてからやってね(´・ω・)

MySQLの設定としてデフォルトの文字コードを設定する。


"create"時にオプション追加とか、あとから変更すること自体ダルい人には、そもそもmysqlの設定を変更しちゃって、デフォルトの文字コードを設定する方法。

# 設定ファイルを修正
$ vim /etc/my.cnf

#################
〜省略〜
[mysqld]
〜省略〜
character-set-server = utf8

#################

設定ファイル修正後は、mysqlを再起動してください。

mysql> status;
〜省略〜
Server characterset:	utf8
Db     characterset:	utf8
Client characterset:	utf8
Conn.  characterset:	utf8
〜省略〜

まとめ


うっし、困ったらこのメモ確認すりゃいいでしょ(`・ω・)=3


おわり。