繁体   English   中英

Java从MS SQL切换到MySQL-字符集

[英]Java switch from MS SQL to MySQL - Character sets

我正在开发一个连接到Java数据库的应用程序。 客户拥有SQL Server,只要我们不想为开发时间购买许可证,我就可以尝试使用Microsoft的SQLExpress版本。 遗憾的是,SQL Server Express不允许网络访问,因此我们无法通过网络在同一数据库上工作,而必须在每个开发人员客户端上安装SQL Server Express服务器。

今天早上,我决定在开发过程中切换到MySQL。 我用UTF8字符集创建了一个MySQL数据库,并将数据导出到CSV文件中,然后我也将其转换为UTF8并导入了它们。

我使用JDBC驱动程序连接Java,现在在执行过程中出现了奇怪的行为。 结果与连接到SQL Server的客户端完全不同。 我自己编写了将SQL转换为Java粘合代码的方法,并且未使用Hibernate或JPA之类的框架。

我想这个问题与字符编码有关。 源代码文件是-不用打扰-用CP1252编码,因为我刚刚开始在Windows上的Eclipse中进行开发并且信任默认设置。 我查询获得ResultSet对象的数据库,然后使用ResultSet提供的getter方法读出数据。 在数据获取期间,我不进行任何字符转换。

现在的问题是,我得到的不是经过加密的,编码得不好的输出,而是NullPointerExceptions和怪异的数据处理。 例如:我编写了一种比较Jobs(一个具有名称,id,货物和所有其他东西的Job的对象)的方法。 运行时的结果不同。 在SQL Server上某些作业是相等的,而在MySQL上则是相同的,但是SQL Server结果是正确的。

我只是查看了数据库属性,发现SQL Server的字符编码在ISO-Latin-1中。

感谢您对马可·科隆的帮助和问候

我对MS SQL知之甚少,但是如果MS SQL数据是latin1编码的,则将其导入到mySQL端的UTF-8数据库中一定会失败并导致数据损坏。

我会尝试先修复数据。 您可以在不转换转储文件和mySQL中的latin1数据库的情况下重试该过程吗?

另外,mySQL和MS SQL之间的数据类型似乎存在显着差异

规划时要小心:您要按容量而不是名称来匹配数据类型。 例如:MySQL VARCHAR最多可容纳255个字符,而SQL Server VARCHAR最多可容纳4000个字符。 在这种情况下,您将需要使用MySQL TEXT列类型而不是VARCHAR。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM