【问题标题】:Twitter Text from Java to MySQL: utf8mb4 SQL Error "reportcharsetnr("从 Java 到 MySQL 的 Twitter 文本:utf8mb4 SQL 错误“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'(如上所示)......就是这样。希望这对某人有所帮助。

标签: java mysql twitter 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 后,我的问题消失了。

【讨论】:

    猜你喜欢
    • 2021-05-06
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 2014-03-15
    • 1970-01-01
    • 2017-03-27
    相关资源
    最近更新 更多