从 Java 到 MySQL 的 Twitter 文本:utf8mb4 SQL 错误“reportcharsetnr(”

Posted

技术标签:

【中文标题】从 Java 到 MySQL 的 Twitter 文本:utf8mb4 SQL 错误“reportcharsetnr(”【英文标题】:Twitter Text from Java to MySQL: utf8mb4 SQL Error "reportcharsetnr(" 【发布时间】:2015-03-07 02:00:19 【问题描述】:

对于上下文:尝试将 Twitter 文本加载到 mysql 数据库中。一些推文包含utf8mb4 字符,会引发java.SQL.Exception。我解决了这个问题,感谢this post.

现在,Java 代码运行没有错误;但是,我无法在我的桌子上执行简单的select * from test.tweet

我收到以下 SQL 错误:

错误代码:0 45) 。请报告charsetnr (

SQL 代码:

create table test.tweet (
    text varchar(200) character set utf8mb4 collate utf8mb4_unicode_ci not null);

Java 代码: (我知道这是可行的)

// create a mysql database connection
        String myDriver = "com.mysql.jdbc.Driver";
        String myUrl = "jdbc:mysql://localhost:3306/test?";
        Class.forName(myDriver).newInstance();
        Connection conn = DriverManager.getConnection(myUrl, "root", "pass");
        PreparedStatement setNames = conn.prepareStatement("SET NAMES 'utf8mb4'");
        setNames.execute();

//Load the tweets into a mySQL DB
                    loadTweets(jsonObject, conn);

互联网上没有关于此错误的任何信息。任何想法为什么我无法查询此错误消息:

错误代码:0 45) 。请报告charsetnr (

【问题讨论】:

我实际上解决了我自己的问题,尽管声誉很低,但我想提供答案,因为我认为这是独一无二的。首先,我必须删除整个 SCHEMA。其次,我执行了 SQL 语句:set names 'utf8mb4'。三、我创建了一个表:CREATE table test.test(id primary key not null, text varchar(64) charset utf8mb4 collat​​e utf8mb4_unicode_ci) character set utf8mb4。第四,每次我想执行我的 Java PreparedStatement 时,我实际上都会在之前立即执行一个“set names 'utf8mb4'(如上所示)......就是这样。希望这对某人有所帮助。 【参考方案1】:

在 MySQL Workbench 中,当我在没有排序规则的情况下运行 SET NAMES 时,我也会遇到该错误。

我修复它执行(正确更改排序规则):

SET NAMES 'utf8mb4' collate 'utf8mb4_spanish_ci';

您可以在创建连接后在代码中执行它。

【讨论】:

我使用了@aanton 答案的这种变体,这在我的情况下有效:SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'; @AaronReed 小心,MySQL 中的图表集“utf8”不包含 4 字节 UTF-8 字符,您应该使用“utf8mb4”【参考方案2】:

我在 MySQL Workbench 中创建并尝试使用数据库后收到此错误。重新启动 Workbench 后,我的问题消失了。

【讨论】:

以上是关于从 Java 到 MySQL 的 Twitter 文本:utf8mb4 SQL 错误“reportcharsetnr(”的主要内容,如果未能解决你的问题,请参考以下文章

Twitter的分布式自增ID算法snowflake (Java版)

Twitter的分布式自增ID算法snowflake (Java版)

Twitter的分布式自增ID算法snowflake (Java版)

Twitter的分布式自增ID算法snowflake (Java版)

Twitter的分布式自增ID算法snowflake (Java版)

雪花算法Twitter的分布式自增ID算法snowflake (Java版)