はじめに
ローカールサーバからリモートサーバにデータベースを移管した後に文字化けてしまった。
修正の顛末を報告する。
環境
ローカル
OS: Ubuntu 18.04.1 LTS
PHP: PHP 7.2.10-0ubuntu0.18.04.1 (cli) (built: Sep 13 2018 13:45:02)
MySQL: Server version: 5.7.24-0ubuntu0.18.04.1 (Ubuntu)
リモート
OS: CentOS release 6.4 (Final)
PHP: PHP 5.4.14 (cli) (built: Apr 11 2013 11:04:32)
MySQL: Server version: 5.5.30 MySQL Community Server (GPL) by Remi
現状
リモートサーバーの文字コードを確認する。
mysql> show create database (DB名);
+—————–+—————————————————————————-+
| Database | Create Database |
+—————–+—————————————————————————-+
|(DB名)| CREATE DATABASE `(DB名)` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+—————–+—————————————————————————-+
1 row in set (0.00 sec)
mysql> show variables like ‘%char%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
介入
/etc/my.cnfを書き換える。というか、以下セクションが書き込まれていなかったので追記した。
[mysqld]
character-set-server=utf8
skip-character-set-client-handshake
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
mysql> show create database (DB名);
+—————–+—————————————————————————-+
| Database | Create Database |
+—————–+—————————————————————————-+
| (DB名) | CREATE DATABASE `(DB名)` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+—————–+—————————————————————————-+
1 row in set (0.00 sec)
mysql> show variables like ‘%char%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| 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 | /usr/share/mysql/charsets/ |
+————————–+—————————-+
8 rows in set (0.00 sec)
まだ修正されていない。
mysql上で
alter database (DB名) character set utf8;
mysql> show create database (DB名);
+—————–+—————————————————————————-+
| Database | Create Database |
+—————–+—————————————————————————-+
| (DB名) | CREATE DATABASE `(DB名)` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+—————–+—————————————————————————-+
1 row in set (0.00 sec)