[原创]MySQL数据类型CHAR(M) VARCHAR(M)区别_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3001 | 回复: 0   主题: [原创]MySQL数据类型CHAR(M) VARCHAR(M)区别        下一篇 
tngou
注册用户
等级:中校
经验:2433
发帖:192
精华:15
注册:2014-4-28
状态:离线
发送短消息息给tngou 加好友    发送短消息息给tngou 发消息
发表于: IP:您无权察看 2014-6-20 10:51:07 | [全部帖] [楼主帖] 楼主   主页

一、CHAR(M)

CHAR(M)定义的列的长度为固定的, M取值可以为0~255之间,当保存CHAR值时,

在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。

在存储或检索过程中不进行大小写转换。

CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论

你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充。

二、VARCHAR(M)

VARCHAR(M)定义的列的长度为可变长字符串,M取值可以为0~65535之间,(VARCHAR的

最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)。

VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。

VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。varchar存储变长数据,

但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,

把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么"+1"呢?

这一个字节用于保存实际使用了多大的长度。从空间上考虑,用varchar合适;从效率上考虑,用char合适,

关键是根据实际情况找到权衡点。

三、CHAR(M), VARCHAR(M)不同之处

CHAR和VARCHAR最大的不同就是一个是固定长度,一个是可变长度。由于是可变长度,因此实际存储的时

候是实际字符串再加上一个记录字符串长度的字节(如果超过255则需要两个字节)。如果分配给CHAR或

VARCHAR列的值超过列的最大长度,则对值进行裁剪以使其适合。如果被裁掉的字符不是空格,

则会产生一条警告。如果裁剪非空格字符,则会造成错误(而不是警告)并通过使用严格SQL模式禁用值的插入。 

该贴由hui.chen转至本版2014-11-5 16:11:48




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论