根据PostgreSQL文档,它们支持字符数据的3种数据类型:
character varying(n), varchar(n) variable-length with limit
character(n), char(n) fixed-length, blank padded
text variable unlimited length在我的应用程序中,我遇到了一些令人不快的场景,其中insert/update查询失败,因为要插入的文本超出了varchar(n)或char(n)限制。
对于这种情况,将此类列的数据类型更改为text就足够了。
我的问题是:
text,那么性能/内存是否会有任何下降?text的列每次存储10个或10个以上字符,我应该选择text还是varchar(10)?text,有什么坏处?发布于 2013-12-02 11:21:30
您提到的所有数据类型都使用相同的内部表示(中等著名的struct varlena)
CHAR和VARCHAR数据类型只是添加长度检查,并且(在CHAR情况下)具有不同的空格填充语义。
您可以在上述任何对您的逻辑都不重要的地方安全地使用TEXT。
发布于 2013-12-02 11:24:02
从链接到的页面中:
“这三种类型之间没有性能差异,除了使用空白填充类型时增加存储空间,以及在存储到长度受限列时需要额外的CPU周期来检查长度。在其他数据库系统中,字符(N)具有性能优势,但在PostgreSQL中没有这种优势;事实上,由于存储成本增加,字符(N)通常是三种类型中最慢的。在大多数情况下,应该使用文本或字符变化。”
在Postgres中使用text数据类型似乎没有任何缺点。
但是,您应该考虑是否真的希望将大量文本存储在数据库中。将其保持为varchar,但限制较高,可以防止您无意中将大量数据存储在数据库中。
https://stackoverflow.com/questions/20326892
复制相似问题