MySQL varchar字段长度限制说明
(2014-09-10 16:53:01)
标签:
mysqlvarchar |
分类: MYSQL |
脑补,varchar(N),N指的是最大字符数,不是字节数。
->
recordid varchar (32)
NOT NULL,
->
a1 varchar (10000) DEFAULT NULL,
->
a2
varchar (10000) DEFAULT NULL,
->
a3
varchar (10000) DEFAULT NULL,
->
primary
KEY (recordid)
->
) ENGINE=INNODB DEFAULT CHARSET=utf8;
->
recordid varchar (32)
NOT NULL,
->
a1 varchar (30000) DEFAULT NULL,
->
a2
varchar (30000) DEFAULT NULL,
->
a3
varchar (30000) DEFAULT NULL,
->
primary
KEY (recordid)
->
) ENGINE=INNODB DEFAULT CHARSET=utf8;
`recordid` varchar(32) NOT
NULL,
`a1` mediumtext,
`a2` mediumtext,
`a3` mediumtext,
PRIMARY KEY
(`recordid`)
先上测试说明:
eg1:
mysql> CREATE TABLE test
(
ERROR 1118
(42000): Row size too
large. The
maximum row size for the used table
type, not
counting BLOBs, is 65535. You have to change some columns to
TEXT or BLOBs
eg2:
mysql> CREATE TABLE test
(
Query OK, 0 rows affected, 3 warnings (0.07 sec)
mysql>
show warnings;
+-------+------+---------------------------------------------+
| Level
| Code
| Message
|
+-------+------+---------------------------------------------+
| Note
| 1246 | Converting column 'a1' from VARCHAR to TEXT
|
| Note
| 1246 | Converting column 'a2' from VARCHAR to TEXT
|
| Note
| 1246 | Converting column 'a3' from VARCHAR to TEXT
|
+-------+------+---------------------------------------------+
3 rows
in set
(0.00
sec)
mysql> show create table
test;
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table
| Create Table
|
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tb_test
| CREATE TABLE
`test` (
) ENGINE=InnoDB DEFAULT
CHARSET=utf8 |
官网手册内容:
Every table (regardless of storage engine)
has a maximum row size of 65,535 bytes. Storage engines may place additional constraints on
this limit, reducing the effective maximum row size。
1:单行最大限制为65535字节,这里是不包括大字段 text
,blob;
2:单个字段如果大于65535,则会直接转成 mediumtext,会在建表的时候出现warnings
提示 。
解释上面的问题:
eg1:
单个字段长度 :
varchar(10000), 字节数:10000* 3(utf8是3个字节,gbk 是2个字节) + (1
or 2 ) =30000 ,小于655535
单行ROW记录长度: varchar(10000) *3 ,
单个字段长度*3
=90000
,大于65535,所以不能成功建表,报错
。
eg2:
单个字段长度 : varchar(30000), 字节数:10000* 3(utf8是3个字节,gbk 是2个字节) + (1 or 2 ) =90000 ,大于655535 ,所以字段类型转换成mediumtext,但是会出现warnings;
单行ROW记录长度: 因为字段类型已经是mediumtext,不存在65535字节限制。所以可以成功建表。
参考链接:
1:http://dev.mysql.com/doc/refman/5.1/en/column-count-limit.html
2:http://dev.mysql.com/doc/refman/5.1/en/silent-column-changes.html