mysql5.0以上
mysql中, varchar(n)和char(n)表示n个字符, 不区分汉字和英文, 也就是说char(1)能存入1个英文字符, 也能存入1个汉字, 而不是1/3个或者1/2个汉字;
但是实际上存入n个汉字和存入n个英文所占用的字节是有区别的,
对于开发者来说, 并不用关注字节数, mysql 屏蔽了具体的存储细节,而直接以实际字符的个数来决定char存储的个数.
mysql4.0以下
varchar(n)指的是n个字节
需要注意的是:
1. MySQL 并不会对超过长度的字符报错,而是直接截断了.
2.varchar是有长度限制的, 字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766; 字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845; 定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。(具体最大长度限制可能要另开一章)
3. 需要存储较长数据的时候还是建议使用text, 如果需要存储文字或图片, 建议使用blob.
查看mysql版本:
SELECT VERSION();
测试汉字占用长度(mysql5.0以后的varchar长度用CHAR_LENGTH):
SELECT LENGTH("测"); 结果:3
SELECT CHAR_LENGTH("测"); 结果:1
补充:
位、字节、字符的区别
位(bit):是计算机 内部数据储存 的最小单位,10001000是一个八位二进制数。
字节(byte):是计算机中 数据处理 的基本单位,习惯上用大写 B 来表示,1B(byte,字节)= 8bit(位)
字符:是指计算机中使用的字母、数字、字和符号
ASCIIS码: 1个英文字母(不分大小写)= 1个字节
1个中文汉字 = 2个字节
1个ASCII码 = 1个字节
UTF-8编码: 1个英文字符 = 1个字节
1个英文标点 = 1个字节
1个中文(含繁体) = 3个字节
1个中文标点 = 3个字节
Unicode编码:1个英文字符 = 2个字节
1个英文标点 = 2个字节
1个中文(含繁体) = 2个字节
1个中文标点 = 2个字节
GBK:1个英文字符 = 1个字节
1个汉字=2个字节