Utf 8 Firebird-UTF8 VarChar大小

Utf 8 Firebird-UTF8 VarChar大小,utf-8,firebird,varchar,Utf 8,Firebird,Varchar,我正在将firebird数据库中的所有varchar列更改为UTF8,但是我不理解varchar大小的差异 例如,当charset和collation设置为nothing时,我们可以将varchar大小设置为255,如果我们将charset和collation设置为UTF8,当我们将varchar设置为255时,它会读取不同的值 UTF8中varchar(255)的等效varchar大小是多少 为VARCHAR(N)字段使用UTF8字符集需要为任何NUTF8字符保留足够的空间。一个这样的字符的长

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

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


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

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

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

CREATE TABLE "TableÅÄÖåäö"
(
  "ColÅÄÖåäö" Varchar(50)
);
在具有默认字符集UTF8的数据库中。(请注意,您至少需要Firebird 2.0才能完成此操作。)

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


因此,要回答您的问题:要使UTF8列具有255个字符的空格,请将其输入为
VARCHAR(255)
,但在数据库中,它的大小将为1020字节。

什么是“它读取不同的值?”为什么大小为1220字节?它应该是255*4=1020字节吗?@TomCat500:你当然是对的,一个打字错误。谢谢你的提示,修复它。