什么是VARCHAR(最大)的在MySQL等效?

有帮助吗?

解决方案

一个varchar的最大长度是受在MySQL最大行的大小,这是64KB(未包括BLOB):

VARCHAR(65535)

然而,注意的是,限制较低如果使用多字节字符集:

VARCHAR(21844) CHARACTER SET utf8

下面是一些例子:

在最大行大小为65535,但一个varchar还包括一个或两个字节来编码给定的字符串的长度。所以,你却不能申报的最大行大小的VARCHAR,即使是在表中唯一的列。

mysql> CREATE TABLE foo ( v VARCHAR(65534) );
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

但是,如果我们试图减小的长度,我们发现,工作的最大长度:

mysql> CREATE TABLE foo ( v VARCHAR(65532) );
Query OK, 0 rows affected (0.01 sec)

现在,如果我们试图在表级别使用多字符集的,我们发现,它计算每个字符多个字节。 UTF8字符串不的不一定的使用每串多个字节,但MySQL不能假设你会限制单字节字符将来所有的插件。

mysql> CREATE TABLE foo ( v VARCHAR(65532) ) CHARSET=utf8;
ERROR 1074 (42000): Column length too big for column 'v' (max = 21845); use BLOB or TEXT instead

尽管什么样的最后一个错误告诉我们,InnoDB的还是不喜欢的21845的长度。

mysql> CREATE TABLE foo ( v VARCHAR(21845) ) CHARSET=utf8;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

这是非常合情合理的,如果你计算出21845 * 3 = 65535,这本来不会奏效。而21844 * 3 = 65532,这确实工作。

mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
Query OK, 0 rows affected (0.32 sec)

其他提示

什么是VARCHAR(最大)?

varchar(max)为Microsoft SQL Server的一个特征。

数据的一列可以在2005年之前的版本存储在Microsoft SQL Server版本的量限制为8KB。为了存储超过8KB越多,你将不得不使用TEXTNTEXT,或BLOB列的类型,他们的数据存储为8K的网页的集合,这些列类型从表中数据页分开;他们支持存储多达2GB每行。

在大告诫这些列类型是,他们通常需要特殊功能和语句访问和修改的数据(例如READTEXTWRITETEXTUPDATETEXT

在SQL Server 2005中,varchar(max)引入统一用于检索和大柱修改数据的数据和查询。对于varchar(max)列中的数据被存储内嵌在表中的数据的页面。

如在MAX列中的数据填充溢出页被分配一个8KB的数据页和先前页面指向它形成一个链表。不像TEXTNTEXTBLOBvarchar(max)列类型支持所有相同的查询的语义其他列类型。

因此varchar(MAX)实际上意味着varchar(AS_MUCH_AS_I_WANT_TO_STUFF_IN_HERE_JUST_KEEP_GROWING)和不varchar(MAX_SIZE_OF_A_COLUMN)

MySQL不具有等同的成语。

为了获得相同的存储量为MySQL中的varchar(max)你仍然需要求助于BLOB列类型。 本文讨论有效地存储在MySQL大量数据的非常有效的方法。

一个varchar的最大长度是

65535

由一个字符的最大字节长度在字符分割设置的列被设置为(例如UTF8 = 3个字节,UCS2 = 2,LATIN1 = 1)。

减去2个字节来存储长度

减去所有其他列的长度

减去每8列,其可为空1个字节。如果列是空/空不被此存储为一个字节的一个比特/字节称为空掩模,每列1个比特其可为空。

对于SQL Server

改变表prg_ar_report_colors添加Text_Color_Code VARCHAR(最大);

对于MySQL

改变表prg_ar_report_colors添加Text_Color_Code LONGTEXT;

对于Oracle

改变表prg_ar_report_colors添加Text_Color_Code CLOB;

Mysql的从VARCHAR转换列下极限尺寸时为TEXT !!!

mysql> CREATE TABLE varchars1(ch3 varchar(6),ch1 varchar(3),ch varchar(4000000))
;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> SHOW WARNINGS;
+-------+------+---------------------------------------------+
| Level | Code | Message                                     |
+-------+------+---------------------------------------------+
| Note  | 1246 | Converting column 'ch' from VARCHAR to TEXT |
+-------+------+---------------------------------------------+
1 row in set (0.00 sec)

mysql>

一个varchar的在MySQL 5.6.12最大长度是4294967295。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top