Java 特殊的unicode字符会导致MySQL JDBC中出现异常
我已将我们遇到的一个问题归结为一个简单的测试: 尝试使用参数值对长文本列类型运行直接向上的JDBC插入或更新 新字符串新字符[]{0xDBFF,0xDC00} 出现异常,说明: 不正确的字符串值:'\xF4\x8F\xB0\x80'用于列 似乎这两个字符配对在一起就形成了一个有效的中文符号,它们是没有意义的 我该如何处理这些乱七八糟的角色?它们构成有效的符号和字符。isDefined为这两个字符返回true。从所有字符串中专门去掉这些字符代码似乎会导致不同汉字组合出现更多问题。使用UFT-8编码此字符将产生4个字节: 11110100 10001111 10110000 10000000 MySQL 5.0/5.1不支持4字节UTF8字符,这是一个已知的限制。 MySQL 5.5支持4字节UTF8字符 请参见使用UFT-8编码的此字符将产生4个字节: 11110100 10001111 10110000 10000000 MySQL 5.0/5.1不支持4字节UTF8字符,这是一个已知的限制。 MySQL 5.5支持4字节UTF8字符Java 特殊的unicode字符会导致MySQL JDBC中出现异常,java,mysql,jdbc,Java,Mysql,Jdbc,我已将我们遇到的一个问题归结为一个简单的测试: 尝试使用参数值对长文本列类型运行直接向上的JDBC插入或更新 新字符串新字符[]{0xDBFF,0xDC00} 出现异常,说明: 不正确的字符串值:'\xF4\x8F\xB0\x80'用于列 似乎这两个字符配对在一起就形成了一个有效的中文符号,它们是没有意义的 我该如何处理这些乱七八糟的角色?它们构成有效的符号和字符。isDefined为这两个字符返回true。从所有字符串中专门去掉这些字符代码似乎会导致不同汉字组合出现更多问题。使用UFT-8编码
请参见如果有区别,表中有utf8_bin排序规则进一步检查确认这两个字符是“代理项对”是JDBC连接器本身抛出的错误消息,还是来自数据库?您应该确保表设置为CHARSET=utf8,而不仅仅是排序规则,并且确保在Java代码中使用多字节字符串。错误消息中的值似乎与新的字符串create语句不匹配,这使我认为某个地方正在进行编码。另外,我对Java不太了解,但通常0xDBFF不是字符,因为字符是8位0xFF或类似的,0xDBFF是16位。您使用的是哪个MySQL服务器/连接器版本?我们在MySQL服务器5.1上运行,MySQL连接器版本为5.1.18。我认为你下面的答案一针见血。如果有区别,表中有utf8_bin排序规则进一步检查确认这两个字符是“代理项对”,是JDBC连接器本身抛出错误消息,还是来自数据库?您应该确保表设置为CHARSET=utf8,而不仅仅是排序规则,并且确保在Java代码中使用多字节字符串。错误消息中的值似乎与新的字符串create语句不匹配,这使我认为某个地方正在进行编码。另外,我对Java不太了解,但通常0xDBFF不是字符,因为字符是8位0xFF或类似的,0xDBFF是16位。您使用的是哪个MySQL服务器/连接器版本?我们在MySQL服务器5.1上运行,MySQL连接器版本为5.1.18。我认为你下面的答案一针见血,这很好地解释了这一点。在升级到MySQL的最新版本之前,我们必须去掉那些长UTF8字符来解决这个问题。谢谢你的帮助!这很好地解释了这一点。在升级到MySQL的最新版本之前,我们必须去掉那些长UTF8字符来解决这个问题。谢谢你的帮助!