【问题标题】:flyway encoding problems with utf8使用 utf8 的 flyway 编码问题
【发布时间】: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?)数据源中的不同。您是否尝试将其设置为&lt;url&gt;jdbc:mysql://192.168.1.6/schem2?useUnicode=true&amp;characterEncoding=UTF-8&lt;/url&gt;?我相信&lt;encoding&gt;UTF-8&lt;/encoding&gt; 可以告诉 Flyway 它应该以何种编码方式读取您的 sql 文件内容。
  • 是的,我更正了网址,但结果相同。谢谢你的时间......我会再试一次)

标签: flyway


【解决方案1】:

我对土耳其字符也有同样的问题,它们都被转换为“?”字符。正如@saw303 所说,我从

修改了 flyway.url
jdbc:mysql://192.168.11.7:3306/test_db?autoreconnect=true

jdbc:mysql://192.168.11.7:3306/test_db?autoreconnect=true&useUnicode=true&characterEncoding=UTF-8

这个修改解决了这个问题。

【讨论】:

  • 这应该被接受为正确答案。它对我有用。谢谢!
猜你喜欢
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
相关资源
最近更新 更多