258
267

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MySQLの文字コードをutf8mb4に変更

Last updated at Posted at 2015-08-26

##環境

  • AWS
  • MySQL

##行ったこと
###デフォルト設定

まずはDBの文字コードの確認

show variables like "chara%";

次にmysqlとクライアントのデフォルトの文字コードを設定する。

/etc/my.conf
[mysqld]
...
character-set-server=utf8mb4

[client]
default-character-set=utf8mb4

MySQLの再起動

/etc/init.d/mysqld restart

ここらへんまではQiitaで他の人も投稿をしているので、簡単に

既存のDBだった場合

テーブルの文字コード変更

確認をすると

use db_example;
show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    | 
| character_set_connection | utf8mb4                    | 
| character_set_database   | utf8                       | 
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8mb4                    |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

もともとDBができていたので、
databaseの文字コードだけ、utf-8のままだった。

alter table テーブル名 default character set utf8mb4;

をすることでデフォルトの文字コードを変更することができる。

ALTER TABLE テーブル名 MODIFY カラム名 値 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

カラムの文字列を変更をして確認をした。

show create table TWEET;

+----------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
+----------------------------------------------------------------+
| TWEET | CREATE TABLE `POST` (
  `POST_ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT,
  `POST_TEXT` varchar(255) NOT NULL COMMENT,
  `POST_DATE_TIME` datetime NOT NULL COMMENT,
  `USER_ID` bigint(20) NOT NULL COMMENT,
  PRIMARY KEY (`TWEET_ID`),
  KEY `FK_POST_USER` (`USER_ID`),
  CONSTRAINT `FK_POST_USER` FOREIGN KEY (`USER_ID`) REFERENCES `USER` (`USER_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=166 DEFAULT CHARSET=utf8mb4   
+---------------------------------------------------------------+
1 row in set (0.00 sec)

DBの文字コード変更

※追記しました ご指摘ありがとうございます

変更する理由

新たにテーブルを追加するときに、DEFAULT CHARSET=utf8mb4 を指定し忘れると、DEFAULT CHARSET=utf8 のテーブルができてしまうので。

やり方

ALTER DATABASE {DB} CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.1.1 ALTER DATABASE 構文

##詰まったところ
既存のDBに対して、デフォルト設定(my.conf)の変更だけでは、
適用されなかったためハマった。

※既存のDBの文字コードを変える場合は、utf-8から変える場合は、文字化けは置きないが、
他の文字コードの場合は文字化けする可能性があるので注意。

258
267
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
258
267

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?