java检查UTF8数据类型3字节或4字节Unicode
在我的数据库中,我得到了错误
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column
我使用Java和MySQL 5。据我所知,4字节Unicode在Java中是合法的,但在MySQL 5中是非法的,我认为这可能会导致我的问题,我想检查我的数据类型,所以我的问题是: 如何检查我的UTF-8数据是3字节还是4字节Unicode
你可以在下面搜索框中键入要查询的问题!
在我的数据库中,我得到了错误
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column
我使用Java和MySQL 5。据我所知,4字节Unicode在Java中是合法的,但在MySQL 5中是非法的,我认为这可能会导致我的问题,我想检查我的数据类型,所以我的问题是: 如何检查我的UTF-8数据是3字节还是4字节Unicode
# 1 楼答案
在java中去除Ifound的非BMP字符的最佳方法如下:
# 2 楼答案
UTF-8将基本多语言平面中的所有内容(即U+0000到U+FFFF)编码为1-3字节。因此,您只需要检查字符串中的所有内容是否都在BMP中
在Java中,这意味着检查任何
char
(UTF-16代码单元)是否是高或低代理字符,因为Java将使用代理对编码非BMP字符:# 3 楼答案
如果不想支持beyond BMP,可以在将其交给MySQL之前去掉这些字符:
如果你想支持BMP之外的东西,你需要MySQL 5.5+并且你需要改变一切
utf8
到utf8mb4
(排序规则、字符集…)。但你也需要我这个司机的支持 不熟悉。在Java中处理这些字符也是一件痛苦的事情,因为它们分布在2chars
因此在许多操作中需要特殊处理