提问人: 提问时间:5/5/2009 最后编辑:Alan Moore 更新时间:10/9/2017 访问量:7352
Firebird - UTF8 VarChar 大小
Firebird - UTF8 VarChar size
问:
我正在将 firebird 数据库中的所有 varchar 列更改为 UTF8,但是我不明白 varchar 大小的差异。
例如,将字符集和排序规则设置为 nothing,我们可以将 varchar 大小设置为 255,如果我们将字符集和排序规则设置为 UTF8,当我们将 varchar 设置为 255 时,它会读取不同的值。
UTF8 中 varchar(255) 的等效 varchar 大小是多少?
答:
8赞
mghie
5/5/2009
#1
对字段使用 UTF8 字符集需要为任何 UTF8 字符保留足够的空间。一个此类字符的长度可能在 1 到 4 之间,因此唯一安全的做法是允许每个字符的长度为 4,这意味着需要有 200 个字节的空间来存储 50 个字符(最坏的情况)。VARCHAR(N)
N
N
您可以使用 FlameRobin 工具查看内部结构。假设你有一张表
CREATE TABLE "TableÅÄÖåäö"
(
"ColÅÄÖåäö" Varchar(50)
);
在具有默认字符集 UTF8 的数据库中。(请注意,您至少需要 Firebird 2.0。
系统表存储有关所有关系及其字段的信息。在系统表中,此字段有一条记录,例如,该记录的 .查看 有一条记录,其值为 200。RDB$RELATION_FIELDS
RDB$1
RDB$FIELD_SOURCE
RDB$FIELDS
RDB$1
RDB$FIELD_LENGTH
因此,要回答您的问题:要拥有 255 个字符空间的 UTF8 列,请将其输入为 ,但在数据库中,它的大小为 1020 字节。VARCHAR(255)
评论
0赞
TomCat500
10/9/2017
为什么大小为 1220 字节?应该是 255 * 4 = 1020 字节吗?
0赞
mghie
10/9/2017
@TomCat500:你当然是对的,一个错别字。感谢您的提示,修复它。
上一个:PHP 字符编码问题
评论