是否varchar
只是一个残存从之前text
到来的时候,还是有使用情况下,您会希望使用varchar
?(或者char
就此而言。)
(我每天都使用Postgres和MySQL(MyISAM),所以这些是我最感兴趣的,但是当然也欢迎提供其他数据库的答案。^ _-)
是否varchar
只是一个残存从之前text
到来的时候,还是有使用情况下,您会希望使用varchar
?(或者char
就此而言。)
(我每天都使用Postgres和MySQL(MyISAM),所以这些是我最感兴趣的,但是当然也欢迎提供其他数据库的答案。^ _-)
Answers:
text
列是非标准且特定于实现的列。在许多情况下,取决于数据库,它们可能具有以下一项或多项限制的组合:不可索引,不可搜索和不可排序。
所有这些类型都使用相同的C数据结构在内部保存。。
该text
列是的专用版本,BLOB
并且对索引有限制。
仅这两个示例可以推断到其他SQL RDBMS系统,并且应该有足够的理由来理解何时选择一种类型而不是另一种类型。
只是为了使它含蓄清楚,您永远不要使用
TEXT
它,因为它是专有的和非标准的。SQL
您针对它写的任何内容都将无法移植,并保证将来会给您带来问题。仅使用属于ANSI标准的类型。
CHAR
时,你知道你有字符固定数量的每一个条目。VARCHAR
当每个条目的字符数可变时使用。VARCHAR
可提供的范围,请CLOB
使用UTF-8
编码或等效标准类型。TEXT
因为它是非标准的。non standard and implementation specific
和not indexable, not searchable and not sortable
,但我没有意识到。我当时的印象text
是标准化的。
TEXT
”。如果要迁移到其他数据库,这几乎不会破坏交易,尤其是因为您必须考虑到postgres的无限制VARCHAR
(由于TOAST的原因,没有行限制,例如MySQL)可能不会转换为VARCHAR
in反正其他数据库。
text
,varchar
并且char
都使用不同的原因。当然存在实现上的差异(它们占用了多少大小等),但也有用法和意图方面的考虑。什么类型的使用也告诉你一些有关的那种将被存储在它的数据(或我们都会使用text
的一切)。如果某件东西的长度固定,则使用char
。如果长度可变且上限明确,则使用varchar
。如果这是一大段文本,您几乎无法控制,那text
可能就是您的最佳选择。
char
,varchar
,和text
都被设计用于存储相同类型的数据。因此,这两个答案都是关于边界检查的。如果存在效率差异,那是什么? 我为什么要varchar
用完text
?
数据库非常关注性能-速度和最小化存储。在计算机世界的大多数其他地方,您不会对字符串中有多少个字符感到困扰。它可以是一本百科全书,也可以是一本百科全书的全部内容;全部都是一个字符串。实际上,很多语言甚至都不会打扰您是字符串还是数字。
但是随着计算机变得越来越快并获得更多的内存,人们将更多的数据放入他们的数据库中并进行更奇特的查询。对于数据库来说,今天的CPU和内存就像在64Kb主内存和10Mb硬盘驱动器(在大型机上)的时代一样受到限制。
固定字节数比可变长度数要容易得多。10字节要比1,000,000容易得多。因此,您的数据库希望您提供一个线索,以便可以在几微秒内从TB的数据中获得千兆字节的结果。如果您不那么努力地使用数据库,则不需要它提供的速度,并且会因为不必要的问题而烦恼。但是,如果确实需要性能,您将很乐意给它一些提示。
如其他答案中所述char
,varchar
如果长度始终使用一定数量的字符,长度可以变化但不会太大(如果我猜大多数DB会将其视为char
或text
取决于大小),请使用,text
如果使用可以是任何长度。如果您的SQL尝试使用text
列,则最好以某种方式对其进行汇总,然后将其也放置在一个char
较小的varchar
列中,然后在该列上执行where
和order by
。当然,只有性能对您很重要。
text
已弃用。还需要考虑与数据存储位置以及如何访问数据有关的用法。