使用Java复制MYSQL数据库表 - 排序规则问题

时间:2014-03-26 14:18:59

标签: java mysql database jdbc collation

我知道有很多关于MYSQL和校对的答案和教程,但我仍然无法弄清楚我的问题在哪里 - 抱歉。

我想做什么
正在将完整的数据库从服务器 A 复制到服务器 B (以及之后的其他一些内容)

我是怎么做的
我写了一个

的Java程序
  • 连接到服务器 A
  • 检索数据库中所有表的列表
  • 查询每个表的“SHOW CREATE” - 陈述
  • 连接到服务器 B
  • 执行“SHOW CREATE”-statement
  • 然后选择并将 A 中的表格行插入 B

问题
例如,有一个表,在各自的语言中有几千个城市名称(英语,德语,法语,瑞典语,俄语......)。但是在复制了一些名字(特别是俄罗斯城市)之后是不可读的。例如Алханай变成 ??????
但是,正确保留其他语言的特殊字符。就像丹麦语ø或德语变音符号äüö - 它们都有效,之后只有俄语被搞砸了

我尝试了什么

  • 我重新检查了两个数据库中每个表的排序规则,它们是相同的: utf8_general_ci
  • 初始化JDBC驱动程序并将其设置为使用unicode 字符编码 UTF-8
  • 我甚至用 -Dfile.encoding = UTF-8 选项启动程序(虽然我不知道这是做什么)

如果您有更多想法,我会很感激!谢谢

这是我初始化连接的方式:

 Class.forName("com.mysql.jdbc.Driver");
 Properties sqlInfo = new Properties();
 sqlInfo.setProperty("user", "myUser");
 sqlInfo.setProperty("password", "******");
 sqlInfo.setProperty("zeroDateTimeBehavior", "round");
 sqlInfo.setProperty("useCompression", "true");
 sqlInfo.setProperty("useUnicode", "true");
 sqlInfo.setProperty("characterEncoding", "UTF-8");
 sqlInfo.setProperty("collation_connection", "utf8_general_ci");
 Connection connection= DriverManager.getConnection("jdbc:mysql://url/to/my/server:3306/myDbSchema", sqlInfo);

然后通过执行类似

的语句来获取CREATE TABLE
    Statement statement = connection.createStatement();
    ResultSet resultSet = statement.executeQuery("SHOW CREATE TABLE " + myTableName);

0 个答案:

没有答案