需要将错误字符串截断,以确保它适合于Oracle表列VARCHAR2(2000 BYTE)
设计要求:
主要目标是适应表列。
90-95%的字符串文本是异常消息和堆栈跟踪。但它可能包含一些带有法语、土耳其字符的客户名称,我愿意将其视为?或其他内容。
我想让代码变得非常简单。数据库编码可以更改。可以引入中文字符,但我希望代码仍然能够正常工作。
应该是“非常简单”的,但是它让我思考了一段时间。
有什么建议吗?
最好的选择可能是转换为ASCII码。但我想出了一个不太好的变体,但可能有效。
public static String trimStringToBytes(StringBuilder builder, int maximumBytes)
{
String truncatedString = builder.length() > maximumBytes ? builder.substring(0, maximumBytes) : builder.toString();
byte[] bytes;
String asciiCharsetName = "US-ASCII";
try
{
bytes = truncatedString.getBytes(asciiCharsetName);
}
catch (UnsupportedEncodingException e)
{
//not really possible as JVM should support always US-ASCII but anyway
int worstCaseScenarioBytesPerCharacter = 4;
bytes = truncatedString.substring(0, truncatedString.length() / worstCaseScenarioBytesPerCharacter).getBytes();
}
return new String(bytes, 0, bytes.length > maximumBytes ? maximumBytes : bytes.length);
}
SUBSTRB
。 - user85421SELECT substrb('Příliš', 0, 6) FROM dual;
因为它并没有。 - Jaroslav Záruba