java - 检查 UTF-8 数据类型 3 字节或 4 字节 Unicode

标签 java mysql unicode utf-8 character-encoding

在我的数据库中出现错误

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column

我使用 Java 和 MySQL 5。据我所知,4 字节 Unicode 在 Java 中是合法的,但在 MySQL 5 中是非法的,我认为这可能会导致我的问题,我想检查我的数据类型,所以这是我的问题: 如何检查我的 UTF-8 数据是 3 字节还是 4 字节 Unicode?

最佳答案

UTF-8以 1-3 个字节对基本多语言平面(即 U+0000 到 U+FFFF 包括在内)中的所有内容进行编码。因此,您只需要检查字符串中的所有内容是否 都在 BMP 中。

在 Java 中,这意味着检查任何 char(UTF-16 代码单元)是高位还是低位代理字符,因为 Java 将使用代理对来编码非 BMP 字符:

public static boolean isEntirelyInBasicMultilingualPlane(String text) {
    for (int i = 0; i < text.length(); i++) {
        if (Character.isSurrogate(text.charAt(i))) {
            return false;
        }
    }
    return true;
}

关于java - 检查 UTF-8 数据类型 3 字节或 4 字节 Unicode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14981109/

相关文章:

php - AVG 在同一列上按另一列单个 sql 查询中的值

c# - C# 中具有非 ascii 字符和 FileInfo 的文件路径

c# - 在 C# 中通过 COM Interop 编码字符串时编码失败(双 UTF8 编码?)

java - JVM - 在正在运行的(非检测的) session 中获取类的实例

mysql - 如何从另一台PC连接到mysql数据库?

java - 数据库连接应该始终保持打开状态还是仅在需要时才打开?

html - 如果 HTML5 的默认字符编码是 UTF-8,为什么需要在 HTML5 文档中指定字符编码?

java - 如何防止jsoup转换特殊字符?

java - jOOQ:如何在选择查询中调用Sql用户定义的函数

java - 处理任何错误时如何防止我的应用崩溃?