我一直在使用UTF-8编码的MySQL数据库,现在需要能够存储4字节的表情符号,所以我决定从utf8编码更改为utf8mb4:
ALTER DATABASE bstdb CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE HISTORY CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE HISTORY CHANGE SOURCE_CONTEXT SOURCE_CONTEXT VARCHAR(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
Run Code Online (Sandbox Code Playgroud)
并将mysql.conf.d"character-set-server = utf8"更改为"character-set-server = utf8mb4"
在这些步骤之后,我能够存储emojis(as),但只有在MySQL控制台中执行SQL查询时:当我尝试从MySQL Workbench或Wildfly webapp启动查询时,我收到此错误:
错误代码:1366.字符串值不正确:第1行的'SOURCE_CONTEXT'列''\ xF0\x9F\x92\xA2'
我假设我需要改变客户端连接到数据库的方式,但我不清楚如何.我已经阅读了在JDBC中使用"useUnicode = yes"的内容,但是没有用.
$ {bdpath:3306/bstdb了useUnicode = YES}
编辑:正如评论中所建议的,我试过:
$ {bdpath:3306/bstdb的characterEncoding = UTF-8}
但没有运气,我得到相同的"不正确的字符串值:'\ xF0\x9F\x92\xA2'"错误.
也试过了
$ {bdpath:3306/bstdb了useUnicode =真和characterEncoding = utf8mb4&}?
但它拒绝建立联系.
有关如何配置MySQL工作台和/或JDBC/Wildfly的任何想法?
MySQL版本是5.7.18
MySQL WorkBench版本是6.0.8
JDBC驱动程序版本是5.1.34
谢谢!
我是Java lambdas的新手,我不确定我想要的是否可以实现:我有一个对象列表,我想过滤它们以提取那些匹配给定条件的对象,并将它们放入一个单独的列表(所以我可以对它们执行一些操作,保持原始列表不被修改)我想出了这个:
List<Suggestion> only_translations = original_list.stream().
filter(t -> t.isTranslation).
collect(Collectors.toCollection(() -> new ArrayList<Suggestion>()));
Run Code Online (Sandbox Code Playgroud)
但即使我得到一个新的列表对象,节点似乎链接到原始列表(通过引用,而不是从原始列表中复制的新对象),因此修改新列表中的对象也会修改原来的.
所以,我想知道它是否可行实现(使用lambdas,我知道我可以用迭代所有元素的"经典"方式),在这种情况下,如何实现.提前致谢!