mysql基础之三:char与varchar区别,varchar(M)能存多少

char与varchar区别

  • char (13)长度固定, 如'1234567890' 存储需要空间 10个字符;
  • varchar(13) 可变长 如'1234567890' 需要存储空间 11字符;

从上面可以看得出来char 长度是固定的,不管你存储的数据是多少他都会都固定的长度。而varchar则处可变长度但他要在总长度上加1字符,这个用来存储位置。所以实际应用中用户可以根据自己的数据类型来做。
再看看char,与varchar在速度上的区别:由于某种原因char 固定长度,所以在处理速度上要比varchar快速很多,但是对费存储空间,所以对存储不大,但在速度上有要求的可以使用char类型,反之可以用varchar类型来实例。 

注明:
在用char字符类型时内容后面有空间时必须作相关处理,要不就会把空格自动删除。
建议:
myisam 存储引擎 建议使用固定长度,数据列代替可变长度的数据列。
memory存储引擎 目前都使用固定数据行存储,因此无论使用char varchar列都没关系,
innodb 存储引擎 建意使用varchar 类型 

varchar(50)能存多少?

mysql 4.0版本以下varchar(50), 指的是50字节,如果存放utf8汉字时,只能存放16个(每个汉字3字节)。

mysql 5.0版本以上,varchar(50), 指的是50字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放50个。

示例(mysql5.5):

CREATE TABLE `test` (
  `id` int(11) NOT NULL,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入测试数据(1和2刚好50,3和4超过50被截取):

INSERT INTO test VALUES(1,'12345678901234567890123456789012345678901234567890');
INSERT INTO test VALUES(2,'我是中国人我是中国人我是中国人我是中国人我是中国人我是中国人我是中国人我是中国人我是中国人我是中国人');

INSERT INTO test VALUES(3,'1234567890123456789012345678901234567890123456789011');
INSERT INTO test VALUES(4,'我是中国人我是中国人我是中国人我是中国人我是中国人我是中国人我是中国人我是中国人我是中国人我是中国人12');

结果:

SELECT *,LENGTH(NAME) AS namesize FROM test;

mysql没有varchar2类型。

原文地址:https://www.cnblogs.com/duanxz/p/4925288.html