search
LoginSignup
259

More than 5 years have passed since last update.

posted at

updated at

Organization

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

環境

  • 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から変える場合は、文字化けは置きないが、
他の文字コードの場合は文字化けする可能性があるので注意。

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
What you can do with signing up
259