用java在mysql中保存俄语

用java在mysql中保存俄语,java,mysql,internationalization,flyway,Java,Mysql,Internationalization,Flyway,当我试图从java应用程序通过flyway执行查询时,数据库中的数据以不正确的形式保存。 下面是一个查询示例: INSERT INTO `table_lang` (`id`, `name`) VALUES ('14', 'русский'); id=14执行后,表_lang中的名称为 p 所以我认为问题是由输入文件引起的,我尝试在查询中插入我的名字,并使用各种字符集进行转换 ааСаа \u0440\u0443\u0441\u0441\u043a\u0438\u0439作为UTF-16 \x

当我试图从java应用程序通过flyway执行查询时,数据库中的数据以不正确的形式保存。 下面是一个查询示例:

INSERT INTO `table_lang` (`id`, `name`) VALUES ('14', 'русский');
id=14执行后,表_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
我试着分别改变兴趣表的字符集和校对

  • 字符集=utf16,COLLATE=utf16\u常规\u ci

  • 字符集=utf8,COLLATE=utf8\u常规\u ci

  • 字符集=utf16,COLLATE=utf16\u常规\u ci

  • 字符集=utf8mb4,COLLATE=utf8mb4\u常规\u ci


这些方法都不起作用。你知道怎么解决吗?

我想问题出在服务器上。。。你是哪台服务器?我使用以下命令设置全局时区:
设置全局时区='+3:00'
并尝试了你的命令:
在表中插入_lang(id,name)值('14','crmkССа')
我得到了适当的输出:
id name 14ааСааа
尝试我的命令并告诉它是否有效:)

  • 使用
    CHARSET=utf8mb4 COLLATE=utf8mb4\u unicode\u ci

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

通过这些设置,我可以在我的系统上书写和检索俄语和土耳其语字符


您可能还对时区与字符集的关系感兴趣?