Firebird - UTF8 VarChar尺寸

4 firebird varchar utf-8

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

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

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

mgh*_*hie 7

VARCHAR(N)字段使用UTF8字符集需要为任何NUTF8字符保留足够的空间.一个这样的字符的长度可以在1到4之间,因此唯一安全的是允许N每个长度为4的字符,这意味着需要有200个字节的空间来存储50个字符(最坏情况).

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

CREATE TABLE "TableÅÄÖåäö"
(
  "ColÅÄÖåäö" Varchar(50)
);
Run Code Online (Sandbox Code Playgroud)

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

系统表存储有关所有关系及其字段的信息.在系统表中RDB$RELATION_FIELDS有一个该字段的记录,其中(例如)RDB$1作为RDB$FIELD_SOURCE.调查RDB$FIELDS有一个记录RDB$1,其值为RDB$FIELD_LENGTH200.

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