sg <

WordPressのデータベース移動でトラブルが発生した – MySQLのMy.cnfの問題

はじめに

ローカールサーバからリモートサーバにデータベースを移管した後に文字化けてしまった。

修正の顛末を報告する。

環境

ローカル

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)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください