Firebird - UTF8 VarChar尺寸

时间:2009-05-05 00:57:04

标签: utf-8 firebird varchar

我正在将firebird数据库中的所有varchar列更改为UTF8但是我不理解varchar大小的差异。

例如,如果将charset和collat​​ion设置为nothing,我们可以将varchar大小设置为255,如果我们将charset和collat​​ion设置为UTF8,当我们将varchar设置为255时,它会读取不同的值。

UTF8中varchar(255)的等效varchar大小是多少?

1 个答案:

答案 0 :(得分:7)

VARCHAR(N)字段使用UTF8字符集需要为任何N UTF8字符保留足够的空间。一个这样的字符的长度可以在1到4之间,所以唯一安全的是允许每个长度为4的N个字符,这意味着需要有200个字节的空间来存储50个字符(最差 - 案件条件)。

您可以使用FlameRobin工具查看内部结构。我们假设你有一张桌子

CREATE TABLE "TableÅÄÖåäö"
(
  "ColÅÄÖåäö" Varchar(50)
);

在具有默认字符集UTF8的数据库中。 (请注意,至少需要Firebird 2.0。)

系统表存储有关所有关系及其字段的信息。在系统表RDB$RELATION_FIELDS中,此字段有一条记录,其中(例如)RDB$1RDB$FIELD_SOURCE。查看RDB$FIELDS RDB$1有一条记录,RDB$FIELD_LENGTH的值为200。

所以回答你的问题:要有一个空格为255个字符的UTF8列,你输入它为VARCHAR(255),但在数据库中它的大小为1020字节。