您好
Transact-SQL和MySQL中varchar的最大长度是多少?
我看到很多人在TSQL中使用varchar(max)
。多久了?
MySQL中varchar(max)
的等价表达式是什么?
谢谢
答案 0 :(得分:5)
答案 1 :(得分:3)
在MySQL中,行的最大大小为64KB(65535)。
我不了解TSQL,所以我做了一些研究:
在SQL Server 2000和SQL Server 7中,行的大小不能超过8000个字节。这意味着VARBINARY列只能存储8000个字节(假设它是表中唯一的列),VARCHAR列最多可存储8000个字符,NVARCHAR列最多可存储4000个字符(每个unicode字符2个字节)。此限制源于SQL Server用于将数据保存到磁盘的8 KB内部页面大小。
要在单个列中存储更多数据,您需要使用TEXT,NTEXT或IMAGE数据类型(BLOB),这些数据类型存储在8 KB数据页的集合中,这些数据页与存储其他数据页的数据页分开同一个表中的数据。这些数据页以B树结构排列。 BLOB难以使用和操作。它们不能用作过程或函数中的变量,也不能在REPLACE,CHARINDEX或SUBSTRING等字符串函数中使用。在大多数情况下,您必须使用READTEXT,WRITETEXT和UPDATETEXT命令来操作BLOB。
为了解决这个问题,Microsoft在SQL Server 2005中引入了VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX)数据类型。这些数据类型可以保存BLOB可以容纳的相同数量的数据(2 GB)它们存储在用于其他数据类型的相同类型的数据页中。当MAX数据类型的数据超过8 KB时,使用溢出页面。 SQL Server 2005自动为页面分配溢出指示器,并且知道如何操纵数据行的方式与操作其他数据类型的方式相同。您可以在存储过程或函数内声明MAX数据类型的变量,甚至将它们作为变量传递。您也可以在字符串函数中使用它们。
Microsoft建议在SQL Server 2005中使用MAX数据类型而不是BLOB。实际上,在SQL Server的未来版本中不推荐使用BLOB。