当我试图通过flyway从java应用程序执行查询时,数据库中的数据以不正确的形式保存。示例如下:
INSERT INTO `table_lang` (`id`, `name`) VALUES ('14', 'русский');
执行id=14后,表\u 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 general\U ci;
字符集=utf8,collate=utf8\U general\U ci;
字符集=utf16,collate=utf16\U general\U ci;
字符集=utf8mb4,collate=utf8mb4\u general\u ci;
这些方法都不起作用。你知道怎么解决吗?
2条答案
按热度按时间ojsjcaue1#
使用
CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
您可能还需要添加characterEncoding=UTF-8
在jdbc连接字符串中。通过这些设置,我可以在我的系统上写和检索俄语和土耳其语字符。
您可能还对如何在mysql数据库中支持完全unicode感兴趣
p1tboqfb2#
我想问题出在服务器上。。。你是哪个服务器?我使用以下命令设置全局时区:
set global time_zone = '+3:00';
试过你的命令:INSERT INTO table_lang (id, name) VALUES ('14', 'русский');
我得到了合适的结果:id name 14 русский
试试我的命令,告诉我它是否有效:)