- 对英文当然是50
- 对中文(根据不同的字符集)utf-8的中文占3个字节
- mysql低版本之前是这样的,但是5.0以后就不是了
- mysql varchar(50) 不管中文 还是英文 都是存50个的,但是一个表中所有varchar字段的总长度跟编码有关,如果是utf-8,那么大概65535/3,如果是gbk,那么大概65535/2.
通过查看mysql文档:
http://tool.oschina.net/apidocs/apidoc?api=mysql-5.1-zh/
可知:
- VARCHAR列中的值为可变长字符串。长度可以指定为0到65,535之间的值.
- VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节。
- VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)
例如:
VARCHAR(10)列可以容纳最大长度为10的字符串。实际存储需求是字符串(L)的长度,加上一个记录字符串长度的字节。对于字符串'abcd',L是4,存储需要5个字节。
VARCHAR、BLOB和TEXT类是变长类型。每个类型的存储需求取决于列值的实际长度(用前面的表中的L表示),而不是该类型的最大可能的大小
- 如果分配给CHAR或VARCHAR列的值超过列的最大长度,则对值进行裁剪以使其适合。
- 如果被裁掉的字符是空格,则会产生一条警告。
- 如果裁剪非空格字符,则会造成错误(而不是警告)并通过使用严格SQL模式禁用值的插入。
- 如果MySQL运行在严格模式,超过列长度不的值不保存,并且会出现错误。
感谢这位大佬的文章分享,从中得到了提示:
https://www.cnblogs.com/joeblackzqq/p/4633862.html
网友评论