参考关于Character Types的Postgres文档,我不清楚指定字符变化(varchar)类型的长度。为什么指定字符变化类型的长度
假设:
- 字符串的长度,不要紧的应用。
- 你不在乎别人把数据库中的最大尺寸
- 你有无限的硬盘空间
它确实提到:
的短字符串的存储需求(最多126字节)为1字节 加上实际字符串,其中包括字符 的空格填充。较长的字符串具有4字节的开销而不是1. 长字符串被系统自动压缩,因此磁盘上的物理需求可能会更少。非常长的值也存储在背景表中,因此它们不会影响对较短列值的快速访问。无论如何,可以存储的最长可能的 字符串大约为1 GB。 (在数据类型声明中允许为n的最大值为 小于 那么改变它是没有用的,因为使用多字节 字符编码的字符数和字节数可以相当 不同
这谈论串的大小,而不是字段的大小(即听起来像它会永远压缩在一个大的varchar字段一个大的字符串,而不是在一个大的varchar字段小弦?)
我问这个问题,因为它会更容易(和懒惰)指定一个更大的大小,所以你永远不必担心有一个字符串太l ARGE。例如,如果我为地名指定varchar(50),我将获得具有更多字符的位置(例如Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch),但是如果指定varchar(100)或varchar(500),我不太愿意得到该问题。
如果你最大的字符串是400字符长,那么你会在varchar(500)和(任意)varchar(5000000)或text()之间得到性能命中吗?
如果任何人有答案,并且知道其他数据库的答案,请加上。
我已经使用了Google,但没有找到足够的技术性解释。
与使用'varchar(nn)'相比,使用'text'(或'varchar')以及限制长度的检查约束更灵活一些。改变长度限制就像删除和重新创建检查约束一样简单,而一个ALTER TABLE可以扩展例如varchar(20)到varchar(50)在大型表上非常耗时,并在该表上放置排他锁。 –
伟大的链接...! –