char和varchar的联系和区别

原创 2019-06-26 评论(0) 阅读(0)

联系:

mysql中的字段类型char和varchar都可以存入字符类型数据,都可以通过char(5)和varchar(5)来限制存入字符的长度为5,即想将字符串'abcdef'存入该类型的字段中,是无法成功的,只能存入字符长度小于等于5的数据,所以最终数据库中的数据为'abcde'。

现在有一张student表,其中有字段s_no类型为char(3),s_name类型为varchar(3)。

CREATE TABLE `student` (
  `s_no` char(3) NOT NULL,
  `s_name` varchar(3) NOT NULL,
  `s_sex`  int(3) NOT NULL,
  `s_birthday` datetime DEFAULT NULL,
  `s_class` varchar(5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

现在通过下面的语句向student表中插入一条数据。

INSERT INTO student(s_no, s_name, s_sex) VALUES('abcdef', 'tom', '1');

结果为

+------+--------+-------+------------+---------+
| s_no | s_name | s_sex | s_birthday | s_class |
+------+--------+-------+------------+---------+
| abc  | tom    |   001 | NULL       | NULL    |
+------+--------+-------+------------+---------+

说明s_no字段类型定义为char(3),如果要存入'abcdef',结果存入的是'abc',只能存入3位长度的字符。

区别:

char和varchar的区别主要是占用空间的大小。

和上面同样是student表,通过下面的语句向表中插入一条数据。

INSERT INTO student(s_no, s_name, s_sex) VALUES('ab', 'xz', '1');

结果为

+------+--------+-------+------------+---------+
| s_no | s_name | s_sex | s_birthday | s_class |
+------+--------+-------+------------+---------+
| ab   | xz     |   001 | NULL       | NULL    |
+------+--------+-------+------------+---------+

实际上s_no的数据'ab'占用的空间是3个字符,也即是char定义的长度3;而s_name的数据'xz'占用的空间为2个字符,并不是varchar所定义的长度3。所以使用varchar相对的可以节省磁盘空间。

int、double等数字类型的zerofill属性的作用

zerofill的作用是用0来填充,如上面的结果所示,当定义的s_sex的类型为int(3)长度为3时,而存入的数据是'1'长度只有1,那么它就会在前面填充两个0,结果就是'001'。

+------+--------+-------+------------+---------+
| s_no | s_name | s_sex | s_birthday | s_class |
+------+--------+-------+------------+---------+
| ab   | xz     |   001 | NULL       | NULL    |
+------+--------+-------+------------+---------+

需要注意的是:如果使用Navicat数据库工具,显示的结果如下,显示的是'1',但实际数据还是'001'。

同时,还有很重要的 一点需要注意,即这里s_sex的类型为int(3),此处的长度3并不是像char和varchar那样存入的数据长度只能为3,这里的3只是作用于zerofill属性,并不是对长度进行限制。

通过下面的语句插入一条数据。

INSERT INTO student(s_no, s_name, s_sex) VALUES('66', 'ZZ', 123456789);

得到的结果为:

+------+--------+-----------+------------+---------+
| s_no | s_name | s_sex     | s_birthday | s_class |
+------+--------+-----------+------------+---------+
| 66   | ZZ     | 123456789 | NULL       | NULL    |
+------+--------+-----------+------------+---------+

也就是实际存入的数据依然是'123456789',并不是长度只能为3,而这里对数字的限制是int的最大值。

关注下面的标签,发现更多相似文章 本文TAG标签:
  • 1

    文章

  • 26

    人气

  • 0

    评论

  • 0

    粉丝

char和varchar的联系和区别

Ta的最新文章

标签大全

阅读目录