また起きてしまった時の為に、備忘録として残します。
環境・前提
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
にあります。
[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も作り直さないと反映されない(当たり前だけど忘れがち)
- mysqlログイン
- 文字コード確認
- データベースとテーブル作成
- テーブルの文字コード確認
の順で作っていくのが安全。