TEXT和VARCHAR数据字段有什么区别?

8

我有以下疑问 -
1. 存储更大量的数据时使用哪种数据类型?
2. 当我们指定 varchar(100) 时,这个 100 表示 100个字符 还是 100个位或字节


从答案中可以看出,这在很大程度上取决于您使用的数据库服务器 - 例如,mySQL的VARCHAR与MSSQL的varchar非常不同。 - Piskvor left the building
5个回答

4

在SQL Server中

varchar(100) = 100个ASCII字符和102个字节的存储空间

nvarchar(100) = 100个Unicode/ASCII字符和202个字节的存储空间

text和ntext最高可达2GB,但已被弃用(从SQL Server 2005开始),您应该使用varchar(max)和nvarchar(max),它们也可以达到2GB的存储空间


存储需求对于 VARCHAR(100) 并非 100 字节,而是 102 字节:http://msdn.microsoft.com/en-us/library/ms176089.aspx。`NVARCHAR` 同理。 - the_void
是的,我知道使用2个字节来表示开始和结束位置,这也是为什么要使用char(2)而不是varchar(2)的原因。谢谢,已经更新了答案。 - SQLMenace
实际上不是这样的,这2个字节用于存储VARCHAR数组的大小,而不是起始-结束位置。如果列的大小差异显著,您不应该使用CHAR而不是VARCHAR,因为与VARCHAR相比,这将浪费空间。 - the_void
如果您有超过1个varchar列,则每行还会有2个字节的开销来维护可变列的计数。我举了一个char(2)与varchar(2)的例子,而不是char(50)与varchar(50),因为在那种情况下,如果您只使用25个字节,您会想要使用varchar。 - SQLMenace

2

TEXT可以存储最多64K的数据 - MySQL(例如)还提供了其他变体:TINYTEXT(256字节),MEDIUMTEXT(16MB)和LONGTEXT(4GB)。

VARCHAR(100)列可以容纳最多100个字符的文本。您可以使用VARBINARY存储二进制数据,在这种情况下,VARBINARY(100)字段将容纳最多100个字节。


2
如果使用MySQL,区别主要与存储需求有关:
  • VARCHAR:如果列值需要0-255字节,则为L+1字节,如果值可能需要超过255字节,则为L+2字节

  • TEXT:其中L<2^16,则为L+2字节

这里的L是输入的实际大小。


1

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接