GORM で MySQL にデータを保存するときに Incorrect string value が出る原因を知りたい
gormを使ってmysqlにデータを入れようとしています。
db, _ := gorm.Open("mysql", "user:password@/dbname?charset=utf8&parseTime=True&loc=Local")
file, err := os.Open("./db/seed.csv")
if err != nil {
panic(err)
}
defer file.Close()
reader := csv.NewReader(file)
var upon models.Upon
for {
row, err := reader.Read()
if err == io.EOF {
break
} else if err != nil {
panic(err)
}
upon = models.Upon{Name: row[0], Kana: row[1]}
db.Create(&upon)
}
上記のコードを実行すると、(Error 1366: Incorrect string value: '\xF0\x9F\x8F\x8A\xF0\x9F...' for column 'name' at row 1)
というエラーがでてしまいます。
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| 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 | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
mysql> show create table upons;
+-------+---------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+---------------------------------------------------------------------------------------------------------------------------------------+
| upons | CREATE TABLE `upons` (
`name` varchar(255) DEFAULT NULL,
`kana` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-------+---------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysqlの文字コードはutf8になっています。
上記のプログラムはdockerを使って実行しています。
mysqlのコンテナーに、golangのコンテナーからつないでいます。
両方とも公式のimageです。
ぜひご教授ください。
追記
のような絵文字でエラーが出ていました。