从 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 collate 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版)