我正在将firebird数据库中的所有varchar列更改为UTF8但是我不理解varchar大小的差异.
例如,如果将charset和collation设置为nothing,我们可以将varchar大小设置为255,如果我们将charset和collation设置为UTF8,当我们将varchar设置为255时,它会读取不同的值.
UTF8中varchar(255)的等效varchar大小是多少?
对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字节.
| 归档时间: |
|
| 查看次数: |
6522 次 |
| 最近记录: |