我有以下字符串值:“ 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,而值最终只是两个平方(我认为这是空字符的表示形式)
非常感谢所有帮助!
您所拥有的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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。