在Java中,为确保错误信息errMsg
正确截取并适配MySQL的varchar(1024)
字段(UTF-8编码),需考虑字符数限制及Unicode完整性。以下是实现方法:
解决方案
使用代码点(Code Point)截取,避免破坏Unicode字符(如代理对):
public class StringTruncateUtil {public static String truncateToMaxChars(String input, int maxChars) {if (input == null) {return null;}return input.codePoints().limit(maxChars).collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append).toString();}
}// 使用示例
String errMsg = "..."; // 原始错误信息
String truncatedErrMsg = StringTruncateUtil.truncateToMaxChars(errMsg, 1024);
// 将truncatedErrMsg存入数据库
说明
- 字符数限制:
varchar(1024)
以字符为单位,因此截取前1024个字符。 - 处理Unicode:使用
codePoints()
方法将字符串转换为Unicode代码点流,确保截断时不会破坏代理对(如表情符号)。 - 高效安全:通过流式处理限制代码点数量,确保结果字符串的Unicode有效性。
此方法适用于所有Unicode字符,确保存储到数据库的字符串完整且符合长度限制。