【发布时间】:2018-05-22 07:15:51
【问题描述】:
我正在尝试使用 Flyway 迁移 MySQL 数据库,并且一切正常,除了我遇到了用“?”替换的西里尔符号的编码问题签名。
我正在使用以下 Maven 插件。
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>4.2.0</version>
<configuration>
<user>mysql</user>
<password>password</password>
<url>jdbc:mysql://192.168.1.6/schem2</url>
<encoding>UTF-8</encoding>
<schemas>
<schema>schem2</schema>
</schemas>
</configuration>
</plugin>
在数据源 bean ...
jdbc:mysql://192.168.1.6/schem2?useUnicode=true&characterEncoding=UTF-8
似乎到处都指定了编码。
脚本...
-- MySQL dump 10.13 Distrib 5.7.12, for Win64 (x86_64)
--
-- Host: 192.168.1.6 Database: schem2
-- ------------------------------------------------------
-- Server version 5.5.50-MariaDB
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,
FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `instbl`
--
DROP TABLE IF EXISTS `instbl`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `instbl` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`INN` varchar(12) DEFAULT NULL,
`OGRN` varchar(13) DEFAULT NULL,
`FULLNAME` varchar(255) DEFAULT NULL,
`ADRESS` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `instbl`
--
LOCK TABLES `instbl` WRITE;
/*!40000 ALTER TABLE `instbl` DISABLE KEYS */;
INSERT INTO `instbl` VALUES (1,'11111111111','10000000000','компания1','634
пр.Ленина д.1'),(2,'564441111111','1111','frfrf','wrfwerfw3'),
(3,'4545454','4565662','Полное Имя 1','Адресс 1');
/*!40000 ALTER TABLE `instbl` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
【问题讨论】:
-
确保您的 SQL 迁移脚本是 UTF-8 编码的。你能分享一个例子(INSERT语句和目标表的DDL)吗?
-
感谢您的回答。添加脚本。
-
脚本的文件内容是 UTF-8 编码的吗?看来您使用的是 Windows,默认情况下 Windows 使用
windows-1252作为文件编码。这就是我问的原因 -
顺便说一句。 Maven pom.xml 中的 jdbc url 与(Spring?)数据源中的不同。您是否尝试将其设置为
<url>jdbc:mysql://192.168.1.6/schem2?useUnicode=true&characterEncoding=UTF-8</url>?我相信<encoding>UTF-8</encoding>可以告诉 Flyway 它应该以何种编码方式读取您的 sql 文件内容。 -
是的,我更正了网址,但结果相同。谢谢你的时间......我会再试一次)
标签: flyway