MySQL中varcharvarchar 最大长度度是多少

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
MySQL中varchar最大长度是多少?
下载积分:30
内容提示:MySQL中varchar最大长度是多少?
文档格式:PDF|
浏览次数:336|
上传日期: 02:47:12|
文档星级:
该用户还上传了这些文档
MySQL中varchar最大长度是多少?
官方公共微信mysql中text最大长度是多少_百度知道14681人阅读
数据库(11)
(未完未完全验证,有空再验证)
先写出结论:
非空CHAR的最大总长度是255【字节】;非空VARCHAR的最大总长度是65533【字节】。
可空CHAR的最大总长度是254【字节】;可空VARCHAR的最大总长度是65532【字节】。
原因:非空标记需要占据一个字节,VARCHAR超过255需要用2个字节标记字段长度,不超过255用1个字节标记字段长度.
注意上边是 【字节】,不是【字符】。但mysql5字段定义时,是定义的【字符】数。比如varchar(10),你仅能存入10个英文字母或者汉字,尽管一个字符可能占多个字节。
一个字符可能占用多个字节,这由编码和存放的字符决定。比如UTF8(一种变长的unicode编码)中,一般一个汉字占据3个字节,一个英文字母占据一个字节。
所以,在UTF8的环境下,不允许定义&VARCHAR(65535),因为这远远超出了65535个字节的限制。
以下是MYSQL 官网上的说明:
CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
CHAR和VARCHAR类型声明的长度表示你想要保存的最大字符数。例如,CHAR(30)可以占用30个字符。
CHAR列的长度固定为创建表时声明的长度。长度可以为从0到255的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。
VARCHAR列中的值为可变长字符串。长度可以指定为0到65,535之间的值。(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)。
同CHAR对比,VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。
VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。
如果分配给CHAR或VARCHAR列的值超过列的最大长度,则对值进行裁剪以使其适合。如果被裁掉的字符不是空格,则会产生一条警告。如果裁剪非空格字符,则会造成错误(而不是警告)并通过使用严格SQL模式禁用值的插入。参见。
下面的表显示了将各种字符串值保存到CHAR(4)和VARCHAR(4)列后的结果,说明了CHAR和VARCHAR之间的差别:
VARCHAR(4)
'abcdefgh'
请注意上表中最后一行的值只适用不使用严格模式时;如果MySQL运行在严格模式,超过列长度不的值不保存,并且会出现错误。
从CHAR(4)和VARCHAR(4)列检索的值并不总是相同,因为检索时从CHAR列删除了尾部的空格。通过下面的例子说明该差别:
mysql& CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
Query OK, 0 rows affected (0.02 sec)
mysql& INSERT INTO vc VALUES ('ab& ', 'ab& ');
Query OK, 1 row affected (0.00 sec)
mysql& SELECT CONCAT(v, '+'), CONCAT(c, '+') FROM
+----------------+----------------+
| CONCAT(v, '+') | CONCAT(c, '+') |
+----------------+----------------+
| ab& +&&&&&&&&& | ab+&&&&&&&&&&& |
+----------------+----------------+
1 row in set (0.00 sec)
根据分配给列的字符集校对规则对CHAR和VARCHAR列中的值进行排序和比较。
请注意所有MySQL校对规则属于PADSPACE类。这说明在MySQL中的所有CHAR和VARCHAR值比较时不需要考虑任何尾部空格。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:185263次
积分:2179
积分:2179
排名:第12604名
原创:37篇
转载:25篇
评论:15条
(1)(1)(1)(2)(2)(1)(2)(1)(2)(1)(1)(1)(1)(1)(5)(2)(2)(1)(1)(3)(2)(2)(9)(2)(1)(2)(2)(1)(1)(5)(1)(2)mysql中int和varchar的长度详解-mysql教程-数据库-壹聚教程网mysql中int和varchar的长度详解
在mysql中一般人可能不会去问int与varchar区别了,这个估计一个数字类型,一个字符类型没有可比性了,同时他们长度也不一样,下面我来介绍一下mysql 中int和varchar的长度一些细节吧。
从 -2^31 (-2,147,483,648) 到 2^31 & 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer
长度是0-255个字符哦
mysql 字段中int后面所跟数字有何意义? varchar后的数字又有何意义?
mysql& create table t(a int(1));
Query OK, 0 rows affected (0.10 sec)
mysql& insert into t values(123);
Query OK, 1 row affected (0.02 sec)
mysql& insert into t values();
Query OK, 1 row affected (0.03 sec)
+----------+
| a&&&&&&& |
+----------+
|&&&&& 123 |
+----------+
可见,int(1)并不表示一个字节。
如果更长的数字会不会报错?
mysql& insert into t values(5678);
ERROR ): Out of range value for column 'a' at row 1
mysql& insert into t values();
ERROR ): Out of range value for column 'a' at row 1
mysql& insert into t values();
Query OK, 1 row affected (0.03 sec)
int 型长度最大值是2^31 -1 ,加上有符号数,应该是四个字节的长度。
mysql& alter tabl
Query OK, 5 rows affected (0.25 sec)
mysql& insert into t values(,);
ERROR ): Out of range value for column 'b' at row 1
mysql& insert into t values(,);
Query OK, 1 row affected (0.03 sec)
mysql& select *
+------------+------------+
| a&&&&&&&&& | b&&&&&&&&& |
+------------+------------+
|&&&&&&& 123 |&&&&&& NULL |
|&&&&&& NULL |
|&&&&& 65536 |&&&&&& NULL |
|&&&&&& NULL |
|&&&&&& NULL |
+------------+------------+
6 rows in set (0.00 sec)
可见,int后是否跟数字与最大值没有关系。
再看char 和varchar后的数字
mysql& alter table t add column c char(2);
Query OK, 6 rows affected (0.17 sec)
Records: 6& Duplicates: 0& Warnings: 0
mysql& alter table t add column d varchar(2);
Query OK, 6 rows affected (0.17 sec)
Records: 6& Duplicates: 0& Warnings: 0
+-------+------------+------+-----+---------+-------+
| Field | Type&&&&&& | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| a&&&& | int(1)&&&& | YES& |&&&& | NULL&&& |&&&&&& |
| b&&&& | int(11)&&& | YES& |&&&& | NULL&&& |&&&&&& |
| c&&&& | char(2)&&& | YES& |&&&& | NULL&&& |&&&&&& |
| d&&&& | varchar(2) | YES& |&&&& | NULL&&& |&&&&&& |
+-------+------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
mysql& insert into t values(,,'abc','abc');
ERROR ): Data too long for column 'c' at row 1
mysql& insert into t values(,,'ab','abc');
ERROR ): Data too long for column 'd' at row 1
mysql& insert into t values(,,'ab','ab');
Query OK, 1 row affected (0.02 sec)
可见char和varchar后的数字是存储长度。
那么对于中文字,会不会有字节数大于字数而溢出的问题呢?
mysql& insert into t values(,,'ab','中化');
Query OK, 1 row affected (0.02 sec)
mysql& select *
+------------+------------+------+------+
| a&&&&&&&&& | b&&&&&&&&& | c&&& | d&&& |
+------------+------------+------+------+
|&&&&&&& 123 |&&&&&& NULL | NULL | NULL |
|&&&&&& NULL | NULL | NULL |
|&&&&& 65536 |&&&&&& NULL | NULL | NULL |
|&&&&&& NULL | NULL | NULL |
|&&&&&& NULL | NULL | NULL |
| NULL | NULL |
| ab&& | ab&& |
| ab&& | 中化 |
+------------+------------+------+------+
8 rows in set (0.00 sec)
中文字也是包含在2个字内的。
mysql& insert into t values(,,'ab','中化a');
ERROR ): Data too long for column 'd' at row 1
mysql& insert into t values(,,'ab','?糸F');
Query OK, 1 row affected (0.05 sec)
mysql& select *
+------------+------------+------+------+
| a&&&&&&&&& | b&&&&&&&&& | c&&& | d&&& |
+------------+------------+------+------+
|&&&&&&& 123 |&&&&&& NULL | NULL | NULL |
|&&&&&& NULL | NULL | NULL |
|&&&&& 65536 |&&&&&& NULL | NULL | NULL |
|&&&&&& NULL | NULL | NULL |
|&&&&&& NULL | NULL | NULL |
| NULL | NULL |
| ab&& | ab&& |
| ab&& | 中化 |
| ab&& | ?糸F |
+------------+------------+------+------+
9 rows in set (0.01 sec)
多一个字节都不行。
看一下字符编码。mysql字符编码由服务器,,表,字段四级组成。
在windows下的mysql设置:
mysql& show variables like &character%&;
+--------------------------+--------------------------+
| Variable_name&&&&&&&&&&& | Value&&&&&&&&&&&&&&&&&&& |
+--------------------------+--------------------------+
| character_set_client&&&& | gbk&&&&&&&&&&&&&&&&&&&&& |
| character_set_connection | gbk&&&&&&&&&&&&&&&&&&&&& |
| character_set_database&& | utf8&&&&&&&&&&&&&&&&&&&& |
| character_set_filesystem | binary&&&&&&&&&&&&&&&&&& |
| character_set_results&&& | gbk&&&&&&&&&&&&&&&&&&&&& |
| character_set_server&&&& | utf8&&&&&&&&&&&&&&&&&&&& |
| character_set_system&&&& | utf8&&&&&&&&&&&&&&&&&&&& |
| character_sets_dir&&&&&& | D:mysqlsharecharsets |
+--------------------------+--------------------------+
8 rows in set (0.00 sec)
&t&&&& | CREATE TABLE `t` (
&`a` int(1) DEFAULT NULL,
&`b` int(11) DEFAULT NULL,
&`c` char(2) DEFAULT NULL,
&`d` varchar(2) DEFAULT NULL
&ENGINE=InnoDB DEFAULT CHARSET=utf8
下centos设置:
mysql& show variables like &character%&;
+--------------------------+----------------------------+
| Variable_name&&&&&&&&&&& | Value&&&&&&&&&&&&&&&&&&&&& |
+--------------------------+----------------------------+
| character_set_client&&&& | utf8&&&&&&&&&&&&&&&&&&&&&& |
| character_set_connection | utf8&&&&&&&&&&&&&&&&&&&&&& |
| character_set_database&& | utf8&&&&&&&&&&&&&&&&&&&&&& |
| character_set_filesystem | binary&&&&&&&&&&&&&&&&&&&& |
| character_set_results&&& | utf8&&&&&&&&&&&&&&&&&&&&&& |
| character_set_server&&&& | utf8&&&&&&&&&&&&&&&&&&&&&& |
| character_set_system&&&& | utf8&&&&&&&&&&&&&&&&&&&&&& |
| character_sets_dir&&&&&& | /opt/mysql/share/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
mysql& sho
mysql& show
CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */
字符编码是utf8,
因此,对于utf8中文字符,varchar后面的数字,无论是中文还是英文,都表示相应的字数,不用担心截断。
上一页: &&&&&下一页:相关内容> mysql常用数据类型长度总结[/align]在mysql中创建表时,varchar类型必须指定长
mysql常用数据类型长度总结[/align]在mysql中创建表时,varchar类型必须指定长
发布时间: & &
浏览:42 & &
回复:0 & &
悬赏:0.0希赛币
mysql常用数据类型长度总结
  [/align]在mysql中创建表时,varchar类型必须指定长度,int类型可以不指定长度。当然,在mysql中使用界面创建表(不使用sql语句创建表),若不指定长度,它会为你指定默认长度,下面对mysql中常见的几种数据类型的默认长度和最大长度进行了总结。[align=center]数据类型 默认长度 最大长度varchar 255 65535char 255 65535double 0 255float 0 255int 11 255tinyint 4 255bigint 20 255date 0 0datetime0 0text 0 0
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&

我要回帖

更多关于 mysql varchar 最大 的文章

 

随机推荐