springboot import.sql编码问题

时间:2017-06-25 17:04:18

标签: java mysql spring-boot utf-8 import.sql

我使用的是springboot 1.5.2.RELEASE,当我尝试使用import.sql文件添加带有阿拉伯字母的演示数据时,如下所示:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  MyObj = class(TObject)
   Value: Cardinal;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  public
   Obj1:MyObj;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Obj1.Free;
 Obj1.Value:=Obj1.Value * 5;
 Caption:=IntToStr(Obj1.Value);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 ReportMemoryLeaksOnShutdown:=true;
 Obj1:=MyObj.Create;
 Obj1.Value:=10;
end;

end.

将值插入数据库中:INSERT INTO city (active, name_arabic,name_english) VALUES (b'1', 'الرياض','Riyadh');

我尝试将以下内容添加到application.properties中,但没有运气:

الرياض

我正在使用的数据库是spring.datasource.connectionProperties=useUnicode=true;characterEncoding=utf-8;autoReconnect=true;useSSL=false spring.datasource.sql-script-encoding=UTF-8 ,而collcation是MySQL

只有当我在服务器上运行项目时才会出现此问题,如果运行单元测试或使用maven构建应用程序,则问题不会发生。

请告知如何解决此问题。

3 个答案:

答案 0 :(得分:1)

使用以下maven插件解决了问题:

        <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-surefire-plugin</artifactId>
           <configuration>
              <argLine>-Dfile.encoding=UTF8</argLine>
           </configuration>
        </plugin>

上述插件将解决命令行构建的编码问题。

更新以解决在服务器上运行项目时的问题:

1- Run As

2-运行配置

3-将服务器的编码更改为UTF-8,如下图所示

enter image description here

答案 1 :(得分:0)

您必须将?useUnicode=yes&characterEncoding=UTF-8用于db-url。

您在XML中遇到的错误很可能是因为使用了&#39;&amp;&#39;这不是XML中允许的实体。您应该对连接进行编码,因此工作连接URL应该类似于

<property name="url" value="jdbc:mysql://localhost:3306/DB_Name?useUnicode=true&amp;characterEncoding=UTF-8"/>

您还可以确保您的服务器配置正确,例如将tomIEncoding添加到连接器

<connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>

将指定用于解码URI的字符编码。您应该找到服务器的等效项

答案 2 :(得分:0)

变为乱码。请参阅http://stackoverflow.com/questions/38363566/trouble-with-utf8-characters-what-i-see-is-not-what-i-stored,了解导致它的原因以及代码中需要更改的内容。

要进一步验证,请执行e;该字符串应具有十六进制SELECT HEX(...) FROM ...

相反,如果你得到C398C2A7C399E2809EC398C2B1C399C5A0C398C2A7C398C2B6,那么你就有#34;双重编码&#34;。