使用Java将俄语保存到MySQL

3

当我从我的Java应用程序通过Flyway执行查询时,我的数据库中的数据以不正确的形式保存。一个例子是以下查询:

INSERT INTO `table_lang` (`id`, `name`) VALUES ('14', 'русский');

执行id=14后,table_lang中的名称为:

p??????

因此我认为问题是由输入文件引起的,并尝试在查询中插入使用不同字符集转换后的我的名称:
  • русский
  • \u0440\u0443\u0441\u0441\u043a\u0438\u0439 作为UTF-16
  • \xd1\x80\xd1\x83\xd1\x81\xd1\x81\xd0\xba\xd0\xb8\xd0\xb9 作为UTF-8
并尝试相应地更改我感兴趣的表的字符集和排序规则:
  • CHARACTER SET = utf16,COLLATE = utf16_general_ci;

  • CHARACTER SET = utf8,COLLATE = utf8_general_ci;

  • CHARACTER SET = utf16,COLLATE = utf16_general_ci;

  • CHARACTER SET = utf8mb4,COLLATE = utf8mb4_general_ci;

这些方法都没有奏效。你知道如何解决吗?
2个回答

2
  • 请使用 CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

  • 你可能还需要在JDBC连接字符串中添加characterEncoding=UTF-8

有了这些设置,我可以在我的系统上写入和检索俄语和土耳其字符。

您可能还对如何支持MySQL数据库中的完整Unicode感兴趣。


-1

我认为问题出在服务器上... 你是哪个服务器?我用以下命令设置了全局时区: set global time_zone = '+3:00'; 并尝试了你的命令: INSERT INTO table_lang (id, name) VALUES ('14', 'русский'); 我得到了适当的输出: id name 14 русский 请尝试我的命令并告诉我是否有效:)


2
时区与字符集有什么关系? - fantaghirocco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接