0

我们有一个 jdbc 程序,它将数据从一个数据库移动到另一个数据库。

  1. 源数据库使用的是 Latin9 字符集
  2. 目标数据库使用 UTF-8 编码,列的大小以字节而不是字符指定
  3. 我们已将源数据库的 ddl 脚本转换为目标数据库中的等效脚本,保持列的大小不变。
  4. 在某些情况下,如果有一些特殊字符,转换为 UTF-8 后的数据大小超过了目标数据库中列的大小,导致 jdbc 程序失败。

我知道 UTF-8 是可变宽度编码方案,每个字符可以占用 1-4 个字节,因为最坏的解决方案是分配目标数据库中列大小的 4 倍。

有更好的估计吗?

4

2 回答 2

1

Latin-9 中的欧元符号在 utf-8 中需要 3 个字节来表示。ascii 字符只占用 1 个字节。剩余的 127 个字符将占用 2 个字节。根据实际的语言环境(以及常用的字符),1.5x 和 2x 之间的估计应该足够了。

于 2014-01-01T21:16:48.023 回答
1

由于事先不知道文本字符串会增长多少,我认为您所能做的就是试运行将文本转换为 UTF-8,并生成某些列需要增加大小的警告。任何 ASCII(非重音)字符都将保持单字节,大多数 Latin-9 重音字符每个可能是 2 个字节,但有些可能是 3 个。您必须查看 Latin-9 和 UTF-8 表看看转换后是否有 3 或 4 个字节。不过,您必须检查您的 Latin-9 文本,看看它会增长多少。

于 2013-12-30T20:57:14.100 回答