小编mot*_*rl2的帖子

MySQL Workbench和JDBC中的utf8mb4

我一直在使用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 mysql jdbc mysql-workbench utf8mb4

9
推荐指数
3
解决办法
2万
查看次数

Java lambdas:将节点从列表复制到新列表

我是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,我知道我可以用迭代所有元素的"经典"方式),在这种情况下,如何实现.提前致谢!

java lambda filter collect java-stream

6
推荐指数
1
解决办法
1510
查看次数

标签 统计

java ×2

collect ×1

filter ×1

java-stream ×1

jdbc ×1

lambda ×1

mysql ×1

mysql-workbench ×1

utf8mb4 ×1