MySQL日本語文字化け解消

■現状の確認

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| 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       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

 

■latin1をutf8に変えたい。

変更するファイルは以下。

/etc/mysql/my.conf

 

【変更箇所】(引用)

引用元:【備忘録】MySQL始めてデータベースに日本語いれようとしたらハマった - Qiita

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqldump]
default-character-set=utf8

[mysqld]
character-set-server=utf8
#if you use mysql<5.5 use this
#default-character-set=utf8

ポイントは、mysqldだけdefault-character-setではない

てことです。

character-set-server=utf8

です。気をつけましょう。

 

※ここで/etc/mysql/my.conf /etc/mysql/パーミッションを変更している場合は、

元に戻す!

/etc/mysql/my.conf = 755

/etc/mysql/ = 755

 

MySQL再起動

(sudo) /etc/init.d/mysqld restart

 

■再度現状確認

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.01 sec)

 

mysql> status

も確認するとなおよい。

 

■このあとに作ったテーブル、DBは普通に日本語使えると思う。

既存のテーブルのCHARSETを変えたい場合は以下のとおり。

 

・まずテーブルの現状の確認(accountsというテーブル名とする)

mysql> show create table accounts;

| accounts | CREATE TABLE `accounts` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `user_idstr` varchar(18) DEFAULT NULL,
  `user_name` varchar(255) DEFAULT NULL,
  `user_bio` text,
  `password` varchar(255) DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_idstr` (`user_idstr`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 |

 

・テーブル自体のCHARSET変更

mysql> alter table accounts charset=utf8;
Query OK, 4 rows affected (0.09 sec)
Records: 4  Duplicates: 0  Warnings: 0

 

・確認

mysql> show create table accounts;

| accounts | CREATE TABLE `accounts` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `user_idstr` varchar(18) CHARACTER SET latin1 DEFAULT NULL,
  `user_name` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
  `user_bio` text CHARACTER SET latin1,
  `password` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_idstr` (`user_idstr`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |

OK!(急に列ごとにCHARSETが表示されるようになった。

テーブルがutf8に変わったけど、列はlatin1のままだからだと思う。)

 

・列のCHARSET変更

mysql> alter table accounts modify user_name varchar(255) character set utf8;
Query OK, 5 rows affected (0.12 sec)
Records: 5  Duplicates: 0  Warnings: 0

 

・確認

mysql> show create table accounts;

| accounts | CREATE TABLE `accounts` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `user_idstr` varchar(18) CHARACTER SET latin1 DEFAULT NULL,
  `user_name` varchar(255) DEFAULT NULL,
  `user_bio` text CHARACTER SET latin1,
  `password` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_idstr` (`user_idstr`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 |

user_nameフィールドにCHARACTER SETが明記されていない。

テーブル自体のCHARSETと一致したからだと思う。

 

--