首页 > MySQL > MySQL char与varchar

MySQL char与varchar

来源:原创 作者:thomas 分类:MySQL 阅读:988 日期:2014-05-21

类型
说明
N的范围
CHAR类型
CHAR(N)用来保存固定长度的字符串
0~255(与字符集编码方式无关)
VARCHAR类型
VARCHAR(N)用来保存变长字符类型
 0~65535(单字节字符集时)

从MySQL 4.1版本开始,CHAR(N)和VARCHAR(N)中的N都代表字符长度而非字节长度。当存储时字符长度大于N时,CHAR与VARCHAR将对字符串自动截断。

CHAR

CHAR类型的字符串,MySQL数据库用空格符自动对存储列的右边进行填充操作,直到字符串达到指定的长度N。读取该列时,MySQL数据库自动将填充的空格符删掉。但如果显示地将SQL_MODE设置为PAD_CHAR_TO_FULL_LENGTH,将不会删除填充的空格符。

通过hex函数可以看出,设置SQL_MODE=PAD_CHAR_TO_FULL_LENGTH后,abc字符串后填充的空格符未被删除。

length函数返回的字节长度,char_length函数返回的字符长度

mysql> select @a:='MySQL技术内幕';

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

| @a:='MySQL技术内幕'     |

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

| MySQL技术内幕           |

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

1 row in set (0.00 sec)

十日谈技术博客

mysql> select @a,hex(@a),length(@a),char_length(@a)\G;

*************************** 1. row ***************************

            @a: MySQL技术内幕

       hex(@a): 4D7953514CE68A80E69CAFE58685E5B995

    length(@a): 17

char_length(@a): 9

1 row in set (0.00 sec)

中文字符的utf-8格式长为3个字节。

VARCHAR

VARCHAR类型存储时与CHAR类型不同的是,其存储时需要在前缀长度列表中加入实际存储的字符长度(单字节字符集时,多字节字符集时,CHAR类型也需要为长度列表中加入字符串的长度值),占1~2字节空间,当存储的字符串长度小于255个字节时,占用1个字节空间,当大于255个字节时,需要2字节的空间。MySQL要求一行的定义长度不能超过65535,是指所有列的长度总和不能超过65535。

VARCHAR(N)中N的范围:

单字节字符集,如latin1,最大长度不能超过65535

双字节字符集,如gb2312,最大长度不能超过32766

多字节字符集,如utf8,最大长度不能超过21845

如果设置N过大,MySQL默认转换该字段类型为mediumtext

 

热门文章 更多>

微信扫一扫,关注技术十日谈