为什么我应该使用char而不是varchar?

Kid*_*ode 1 sql sql-server varchar database-design char

Char并且varchar是SQL中的数据类型,因为它们在许多其他语言中(所以这个问题可能是多语言).

从我的理解,不同的是,如果我宣布Char因为Char(20)它会分配20(字节/位)有人能澄清这一点呢?现在,我将使用字节.].然后,如果我只使用16个字节,我仍然会有四个分配给该字段.(浪费4个字节的内存.)

但是,如果我声明一个varcharas varchar(20)并且只使用了16个字节,那么它只会分配16个字节.

当然这更好吗?为什么有人会选择char?它是遗留的原因,还是我缺少的东西?

cod*_*eim 8

喜欢VARCHAR.

在存储紧张的旧时代,它对空间至关重要.如今,磁盘存储很便宜,但RAM和IO仍然很珍贵.VARCHAR是IO和缓存友好的; 它允许您使用数据而不是浪费的文字"空间"空间更密集地打包db缓冲区缓存,并且出于同样的原因,空间填充会产生IO开销.

CHAR()的优势在于经常更新的记录减少了行链接.更新字段并且值大于先前分配的值时,记录可能会链接.然而,这是可以管理的; 数据库通常支持表存储属性上的"无空闲百分比"设置,该设置告诉数据库每行预分配多少额外空间以进行增长.

VARCHAR几乎总是优选的,因为空间填充要求您了解它并以不同的方式编写代码.不同的数据库处理不同.使用VARCHAR,您知道您的字段仅包含您存储在其中的内容.

我还没有用CHAR设计十多年的架构.