开发者社区> 问答> 正文

java.sql.SQLException:错误的字符串值:“ \ xF0 \ x9F ?mysql

我有以下字符串值:“ walmart obama”

我正在使用MySQL和Java。

我收到以下异常:`java.sql.SQLException:不正确的字符串值:'\ xF0 \ x9F \ x91 \ xBD \ xF0 \ x9F ...'

这是我要插入的变量:

var1 varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL` 我尝试插入“沃尔玛奥巴马(Walmart obama)”的Java代码是prepareStatement。所以我正在使用该setString()方法。

看来问题在于值encoding的编码。我怎样才能解决这个问题?以前,我使用的是Derby SQL,而值最终只是两个平方(我认为这是空字符的表示形式)

非常感谢所有帮助!

展开
收起
保持可爱mmm 2020-05-17 13:11:55 801 0
1 条回答
写回答
取消 提交回答
  • 您所拥有的EXTRATERRESTRIAL ALIEN (U+1F47D)和BROKEN HEART (U+1F494)不属于基本的多语言平台。他们不能在Java作为一个字符来表示,甚至,"".length() == 4。它们绝对不是空字符,如果您不使用支持它们的字体,则会看到正方形。

    MySQL的utf8只支持基本多文种平面,你需要使用utf8mb4,而不是:

    对于补充字符,utf8根本无法存储该字符,而utf8mb4需要四个字节来存储它。由于utf8根本无法存储字符,因此在utf8列中没有任何补充字符,并且在从旧版MySQL升级utf8数据时,您不必担心转换字符或丢失数据。

    因此,要支持这些字符,您的MySQL必须为5.5+,并且需要在utf8mb4任何地方使用。连接编码需要为utf8mb4,字符集必须为utf8mb4,协作需要utf8mb4。对于Java来说,它仍然只是"utf-8",但是MySQL需要区别对待。

    我不知道您使用的是什么驱动程序,但是与连接程序无关的一种设置连接字符集的方法是发送查询:

    SET NAMES 'utf8mb4' 建立连接之后。

    另请参见Connector / J:

    14.14:如何将4字节UTF8,utf8mb4与Connector / J一起使用?

    要将4字节UTF8与Connector / J一起使用,请将MySQL服务器配置为character_set_server = utf8mb4。只要未在连接字符串中设置characterEncoding,Connector / J将使用该设置 。这等效于字符集的自动检测。

    调整列和数据库:

    var1 varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL 同样,您的MySQL版本需要相对最新才能获得utf8mb4支持。来源:stack overflow

    2020-05-17 13:13:04
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像