pan*_*hir 6 java oracle character-encoding
我们正在尝试保存下面的字符串,这实际上是db中的一个名字,我们进行一些api调用,我们得到这个名字:
株式会社エス·ダブリュー·コミュニケーションズ
通过我们的代码保存(如在servlet - hibernate - 数据库中),我们得到一个错误:
Caused by: java.sql.BatchUpdateException: ORA-12899: value too large for column "NAME_ON_ACCOUNT" (actual: 138, maximum: 100)
Run Code Online (Sandbox Code Playgroud)
这是23个字符,但看起来每个字符需要6个字节,这只会使它成为138个字符.
下面的代码给了我69:
byte[] utf8Bytes = string.getBytes("UTF-8");
System.out.println(utf8Bytes.length);
Run Code Online (Sandbox Code Playgroud)
这给了我92:
byte[] utf8Bytes = string.getBytes("UTF-32");
System.out.println(utf8Bytes.length);
Run Code Online (Sandbox Code Playgroud)
我肯定会检查NLS_CHARACTERSET并查看IO类,但你有没有看到一个占用6个字节的字符?任何帮助都感激不尽.
它可能将 HTML 实体保存在字符串中。类似于燃或可能是 URL 样式,%8C%9A. 或者也许是 UTF7,例如[Ay76b. (我编造了这些值,但您的实际值将相似)。依赖任何带有字符编码的框架总是一件痛苦的事情,因为它的作者可能是美国或欧洲人,两者都满足简单的 ANSI,其中一个字节等于一个字符。如果您设法了解您的编码并将其转换为真正的 UTF8 甚至 UTF16,在这种特殊情况下它将占用更少的空间。