以下のテーブルに対して、インサート操作をしたらエラーになりました。
1 2 3 4 5 6 7 8 |
mysql> show fields from sires; mysql> show fields from hogehoge; +-------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(100) | YES | | NULL | | +-------+--------------+------+-----+---------+----------------+ |
エラーはこちら。
1 2 |
mysql> insert into hogehoge(name) values('ほげ'); ERROR 1366 (HY000): Incorrect string value: '\xE3\x81\xBB\xE3\x81\x92' for column 'name' at row 1 |
文字コードを確認してみる。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
mysql> 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 | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ |
テーブルの文字コードも確認。
1 2 3 4 5 6 7 8 9 10 |
mysql> show create table hogehoge; +----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | hogehoge | CREATE TABLE `hogehoge` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
UTF8を設定。
1 |
mysql> alter table hogehoge modify name varchar(100) character set utf8; |
mysql> show create table hogehoge;
+———-+——————————————————————————————————————————————————————————————————-+
| Table | Create Table |
+———-+——————————————————————————————————————————————————————————————————-+
| hogehoge | CREATE TABLE hogehoge
(
id
int(11) NOT NULL AUTO_INCREMENT,
name
varchar(100) CHARACTER SET utf8 DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 |
+———-+——————————————————————————————————————————————————————————————————-+
こうすることでインサートも成功。
1 2 |
mysql> insert into hogehoge(name) values('ほげ'); Query OK, 1 row affected (0.01 sec) |