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

标签 java mysql sql-server database

我正在开发一个连接到 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 的方法(一个代表 Job 的对象,有名称、ID、 cargo 和所有这些东西)。运行时的结果不同。有些作业在 SQL Server 上是相等的,有些在 MySQL 上是相等的,但 SQL Server 结果是正确的。

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

感谢科隆的帮助和问候, 马可

最佳答案

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

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

此外,似乎还有notable differences mySQL 和 MS SQL 之间的数据类型:

Be careful when planning this: you want to match data types by capacity and not necessarily by name. For example: a MySQL VARCHAR can hold up to 255 characters, whereas a SQL Server VARCHAR can hold up to 4000 characters. In this case you would need to use a MySQL TEXT column type instead of VARCHAR.

关于Java 从 MS SQL 切换到 MySQL - 字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2287765/

相关文章:

java - 如何在android中获取两个日期之间的周间隔?

java - 使用 java servlet 过滤器操作 css 文件的最佳方法是什么?

mysql 选择在哪里

mysql - 将两列合并为一列,仅显示所需数据

sql-server - SQL Server - 同一列上的谓词和查找谓词

c# - 为什么 SqlClient 在传递 SqlXml 时使用不必要的 XML 转换?

C# 和 SQL Server : any reason to put a single INSERT into a transaction?

java - 如何调用 JUnit 测试作为另一个测试的设置?

java - jFreeChart : Customizing the linear chart axis labels

MySql:在表上运行大量搜索查询的最佳方法