您的位置:首页 > 数据库 > MySQL

mysql中varchar(N)中的N代表什么

2015-08-28 19:05 591 查看
据说是面试题中很经典的一道,在这里做一个实验说明一下。

CREATE TABLE `wzy` (

`ColUTF` varchar(5) CHARACTER SET utf8 DEFAULT NULL,

`ColGBK` varchar(5) CHARACTER SET gbk DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1

上面是表结构

insert into wzy values('aaaaa','aaaaa');

insert into wzy values('a','a');

insert into wzy values('我','我');

insert into wzy values('我我我我我','我我我我我');

插入不同类型的数据

select ColUTF,length(ColUTF),ColGBK,length(ColGBK) from wzy

用length()函数获取每个字符串的长度

mysql> select ColUTF,length(ColUTF),ColGBK,length(ColGBK) from wzy;

+------------+----------------+------------+----------------+

| ColUTF | length(ColUTF) | ColGBK | length(ColGBK) |

+------------+----------------+------------+----------------+

| a | 1 | a | 1 |

| aaaaa | 5 | aaaaa | 5 |

| 我 | 3 | 我 | 2 |

| 我我我我我 | 15 | 我我我我我 | 10 |

+------------+----------------+------------+----------------+

4 rows in set

mysql>

可见UTF-8跟GBK在存储英文字符的时候都是只用一个字节,而且在只有英文的情况下最大的长度都是5

但是在存储中文的时候,字符长度则跟编码的类型有关,utf要使用3个字节,gbk则使用2个,最大长度则是5*编码的宽度

所以N代表的应该是字符的个数,只有在单纯的拉丁文环境下字符的个数才等于字段的长度
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: