LoginSignup
2
3

More than 3 years have passed since last update.

MySQLでテーブル作ったら突然文字コードがlatin1になっている!?

Posted at

また起きてしまった時の為に、備忘録として残します。

環境・前提

Windows 10
つい数日前まではutf8で使っていたはずなのに、今日テーブル作ってみたら何故かDEFAULT CHARSETがlatin1に…
utf8に直します!

テーブルの状況

MariaDB [db_spring]> show create table spring_user;
+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table       | Create Table                                                                                                                                                                                            |
+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| spring_user | CREATE TABLE `spring_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `pass` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

原因を探ります。

show variables like "chara%";
でMySQLの設定を見ると、

MariaDB [(none)]> show variables like "chara%";
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8                           |
| character_set_connection | utf8                           |
| character_set_database   | latin1                         |
| character_set_filesystem | binary                         |
| character_set_results    | utf8                           |
| character_set_server     | latin1                         |
| character_set_system     | utf8                           |
| character_sets_dir       | C:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+

set_databaseがlatin1になっていますね。
ついでにserverも。。。

設定ファイルでutf8に直す

mysqlで文字コードをutf8にセットするより、
設定ファイルmy.ini(macの方は.cnf)を編集します。

my.iniファイルは
XAMPP Control PanelのMySQLのConfigボタン、
もしくはC:\xampp\mysql\bin\my.iniにあります。

my.ini
[mysqld]
...
character-set-server=utf8

my.iniファイルの[ mysqld ]セクションの最後にこれを追加し、再起動します。

確かに、以前ここに同じこと記述していたのに消えていますね。なんでだろう?
アップデート?とかあるのかな?分からん。。。

直っているか確認

とりあえず設定しなおしたので、
再度mysqlに入って確認。

MariaDB [(none)]> show variables like "chara%";
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | cp932                          |
| character_set_connection | cp932                          |
| character_set_database   | utf8                           |
| character_set_filesystem | binary                         |
| character_set_results    | cp932                          |
| character_set_server     | utf8                           |
| character_set_system     | utf8                           |
| character_sets_dir       | C:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+

database,serverはutf8になりましたが、
今度は何故かcp932が出現してるwww
まぁ使っていって考えるので、とりあえずはこれでやってみます。

テーブル作成。

MariaDB [db_spring]> show create table spring_user;
+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table       | Create Table                                                                                                                                                                                            |
+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| spring_user | CREATE TABLE `spring_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `pass` varchar(15) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

いや、latin1のままやん…

もしかすると、データベース自体がlatin1のままなのかも。

データベース自体を作成し直す必要

ということで、mysqlの設定がutf8の状態で

  • DB作り直し
  • テーブルも作り直し

これで確認してみます。

MariaDB [db_spring]> show create table spring_user;
+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table       | Create Table                                                                                                                                                                                          |
+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| spring_user | CREATE TABLE `spring_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `pass` varchar(15) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

無事UTF8でテーブル作成できました。

結論

  • 文字コード設定を変更したらDBも作り直さないと反映されない(当たり前だけど忘れがち)
  1. mysqlログイン
  2. 文字コード確認
  3. データベースとテーブル作成
  4. テーブルの文字コード確認

の順で作っていくのが安全。

2
3
0

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
2
3