Java 在MySQL数据库中插入行之前从字符串中去除二进制代码

Java 在MySQL数据库中插入行之前从字符串中去除二进制代码,java,mysql,sql,database,utf-8,Java,Mysql,Sql,Database,Utf 8,我正在从Twitter上获取推文,并将其存储在数据库中以备将来使用。我在我的驱动程序中使用了UTF-8编码,在我的VARCHAR字段中使用了utf8mb4\u-bin和utf8mb4\u-general\u-ci服务器排序规则。问题是,在VARCHAR字段中插入值时,如果文本有任何二进制代码,那么它将抛出异常,因为VARCHARutf8不接受二进制 下面是一个示例,我正在获取文本并尝试将其插入数据库,但出现错误: Incorrect string value: '\xF0\x9F\x98\xB1

我正在从Twitter上获取推文,并将其存储在数据库中以备将来使用。我在我的驱动程序中使用了
UTF-8
编码,在我的
VARCHAR
字段中使用了
utf8mb4\u-bin
utf8mb4\u-general\u-ci
服务器排序规则。问题是,在
VARCHAR
字段中插入值时,如果文本有任何二进制代码,那么它将抛出异常,因为
VARCHAR
utf8不接受二进制

下面是一个示例,我正在获取文本并尝试将其插入数据库,但出现错误:

Incorrect string value: '\xF0\x9F\x98\xB1\xF0\x9F...' for column 'fullTweet' at row 1
我猜是这两个表情造成的。在将
tweet文本插入我的数据库之前,我如何去除它们

更新:

看起来我可以手动输入表情。我运行以下查询:

INSERT INTO `tweets`(`id`, `createdAt`, `screenName`, `fullTweet`, `editedTweet`) VALUES (450,"1994-12-19","john",_utf8mb4 x'F09F98B1',_utf8mb4 x'F09F98B1')
表中的行是这样的:


插入之前,您可以从tweet字符串中删除非ascii字符


tweetStr=tweetStr.replaceAll(“[^\\p{ASCII}]”,“”)

看起来utf8mb4支持仍未正确配置

要在字段中使用
utf8mb4
,您需要执行以下操作:

  • my.ini
    my.cnf
    中设置
    character Set server=utf8mb4
    。这里只有
    字符集服务器
    真正重要,其他设置不重要

  • 向连接URL添加
    characterEncoding=UTF-8

    jdbc:mysql://localhost:3306/db?characterEncoding=UTF-8
    
  • 配置字段的排序规则


您确定为
utf8mb4
支持正确配置了所有内容吗
characterset server=utf8mb4
在服务器设置中,连接URL中的
characterEncoding=UTF-8
以及字段的正确排序规则?在连接URL的末尾,我添加
?使用Unicode=true&characterEncoding=UTF-8
。“服务器连接排序规则”是
utf8mb4\u general\u ci
,字段排序规则是
utf8mb4\u bin
(我仔细检查了一百万次)。什么是
字符集服务器
服务器字符集:UTF-8 Unicode(utf8)
(我想这就是你说的那个)。什么是
显示变量,如“character\u set\u server”
显示?我仍然有同样的问题。我真的把那里的一切都设置为
utf8mb4
。我转到
my.ini
并取消对行的注释
character\u set\u server=utf8mb4
,我运行您之前发送给我的查询,它返回:
character\u set\u server=utf8mb4
。我将数据库排序规则更改为
utf8mb4\u general\u ci
。我将表和每行的排序规则更改为
utf8mb4\u general\u ci
。url正是您编写它的方式。我真的不明白这里发生了什么。如果您尝试手动将文本值
\u utf8mb4 x'F09F98B1'
插入到该列中,会怎么样?看起来很有效(如果我做得对的话)。我将用我运行的查询以及它在表中的表示方式更新我的帖子。我发现了问题所在。看起来我也不需要更改连接URL,因为我正在设置
字符集服务器
。现在它可以正常工作了,它保存了文本,但是用问号代替了表情符号。这对我来说已经足够好了。