Flyway Migration:使用德国变音符号导入数据
Flyway Migration: Data Import With German Umlauts
我正在使用 Flyway 4.0 和 SpringBoot 1.3。0.RELEASE 和 MySQL 5.6.27 社区服务器。
当我使用 MySQL Workbench 检查我的架构时,它具有“utf8_general_ci”作为默认排序规则和“utf8" 作为默认字符集(架构是使用 "utf8 - default collation" 创建的)。里面有一个table"Colors",它的字符集也是utf8,像几个varchar列。
现在我有了一个初始的 Flyway 迁移脚本,它创建了具有完整结构的数据库。此外,它用一些项目填充颜色 table。
...
DROP TABLE IF EXISTS `static_color`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `static_color` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
...
`color_group_name` varchar(15) DEFAULT NULL,
...
...
) ENGINE=InnoDB AUTO_INCREMENT=845 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
...
LOCK TABLES `static_color` WRITE;
/*!40000 ALTER TABLE `static_color` DISABLE KEYS */;
INSERT INTO `static_color` VALUES (7,'2C','Light Yellow Green','45-3',240,233,145,11,'Grün',119,'Light Yellowish Green',237,234,115,'','edea73');
/*!40000 ALTER TABLE `static_color` ENABLE KEYS */;
UNLOCK TABLES;
...
我想在一栏中包含一个颜色组名称(例如 Grün)。 Flyway 尝试导入数据,但我收到类似
的警告
[localhost-startStop-1] DEBUG o.f.c.internal.dbsupport.SqlScript - Executing SQL: INSERT INTO `static_color` VALUES (7,'2C','Light Yellow Green','45-3',240,233,145,11,'Grün',119,'Light Yellowish Green',237,234,115,'','edea73')
[localhost-startStop-1] WARN o.f.c.i.dbsupport.JdbcTemplate - DB: Invalid utf8 character string: 'FC6E' (SQL State: HY000 - Error Code: 1300)
[localhost-startStop-1] WARN o.f.c.i.dbsupport.JdbcTemplate - DB: Incorrect string value: '\xFCn' for column 'color_group_name' at row 1 (SQL State: HY000 - Error Code: 1366)
结果是数据库中的条目仅包含“Gr”,而不是列 "color_group_name" 中的 "Grün"。它用“Ä,ä,Ü,ü,ß...”截断每个条目。
我不知道为什么会这样。当我在 eclipse 中查看我的迁移文件的属性时,它说它也有 UTF-8 文本文件编码。即使是 Flyway 调试输出也有正确的编码...还有其他人有这个问题吗?
尝试将 utf-8 编码放入连接字符串中,如下所示:
jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF-8
我不知道为什么,但在删除以下行后它起作用了:
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
...
/*!40101 SET character_set_client = @saved_cs_client */;
我从 MySQL Workbench 导出中得到这些行,所以我只是使用它们...
我正在使用 Flyway 4.0 和 SpringBoot 1.3。0.RELEASE 和 MySQL 5.6.27 社区服务器。
当我使用 MySQL Workbench 检查我的架构时,它具有“utf8_general_ci”作为默认排序规则和“utf8" 作为默认字符集(架构是使用 "utf8 - default collation" 创建的)。里面有一个table"Colors",它的字符集也是utf8,像几个varchar列。
现在我有了一个初始的 Flyway 迁移脚本,它创建了具有完整结构的数据库。此外,它用一些项目填充颜色 table。
...
DROP TABLE IF EXISTS `static_color`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `static_color` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
...
`color_group_name` varchar(15) DEFAULT NULL,
...
...
) ENGINE=InnoDB AUTO_INCREMENT=845 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
...
LOCK TABLES `static_color` WRITE;
/*!40000 ALTER TABLE `static_color` DISABLE KEYS */;
INSERT INTO `static_color` VALUES (7,'2C','Light Yellow Green','45-3',240,233,145,11,'Grün',119,'Light Yellowish Green',237,234,115,'','edea73');
/*!40000 ALTER TABLE `static_color` ENABLE KEYS */;
UNLOCK TABLES;
...
我想在一栏中包含一个颜色组名称(例如 Grün)。 Flyway 尝试导入数据,但我收到类似
的警告[localhost-startStop-1] DEBUG o.f.c.internal.dbsupport.SqlScript - Executing SQL: INSERT INTO `static_color` VALUES (7,'2C','Light Yellow Green','45-3',240,233,145,11,'Grün',119,'Light Yellowish Green',237,234,115,'','edea73')
[localhost-startStop-1] WARN o.f.c.i.dbsupport.JdbcTemplate - DB: Invalid utf8 character string: 'FC6E' (SQL State: HY000 - Error Code: 1300)
[localhost-startStop-1] WARN o.f.c.i.dbsupport.JdbcTemplate - DB: Incorrect string value: '\xFCn' for column 'color_group_name' at row 1 (SQL State: HY000 - Error Code: 1366)
结果是数据库中的条目仅包含“Gr”,而不是列 "color_group_name" 中的 "Grün"。它用“Ä,ä,Ü,ü,ß...”截断每个条目。
我不知道为什么会这样。当我在 eclipse 中查看我的迁移文件的属性时,它说它也有 UTF-8 文本文件编码。即使是 Flyway 调试输出也有正确的编码...还有其他人有这个问题吗?
尝试将 utf-8 编码放入连接字符串中,如下所示:
jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF-8
我不知道为什么,但在删除以下行后它起作用了:
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
...
/*!40101 SET character_set_client = @saved_cs_client */;
我从 MySQL Workbench 导出中得到这些行,所以我只是使用它们...