从Latin-9(ISO / IEC 8859-15)转换时,以UTF-8计算字符串大小

时间:2013-12-30 20:49:58

标签: database jdbc utf-8 latin9

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

  1. 源数据库使用Latin9字符集
  2. 目标数据库使用UTF-8编码,列的大小以字节而不是字符
  3. 指定
  4. 我们已将源数据库的ddl脚本转换为目标数据库中的等效脚本,保持列的大小不变。
  5. 在某些情况下,如果有一些特殊字符,转换为UTF-8后的数据大小超过了目标数据库中列的大小,导致jdbc程序失败。
  6. 据我所知,UTF-8是可变宽度编码方案,每个字符可以占用1-4个字节,因为最坏的情况解决方案是分配目标数据库中列大小的4倍。

    有更好的估计吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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