免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1730 | 回复: 2
打印 上一主题 下一主题

char数据类型的一些疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-06-25 20:42 |只看该作者 |倒序浏览
MySQL官网给出的char类型的存储如下:

M represents the declared column length in characters for nonbinary string types and bytes for binary string types. L represents the actual length in bytes of a given string value.

CHAR(M)        M × w bytes, 0 <= M <= 255, where w is the number of bytes required for the maximum-length character in the character set. See Section 14.6.3.3.5, “Physical Row Structure” for information about CHAR data type storage requirements for InnoDB tables.

这里的M是什么意思?因为翻译中文后也读不懂M的意义,如果我的一个表创建如下:
CREATE TABLE `t02` (
  `char_` char(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

因为utf8表是一个字符占用3个字节,所以我想这个w应该=3,那插入一条数据是10*3=30 byte吗?显然不太对,因为有这么一个表:
CREATE TABLE `t06` (
  `char_` char(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1

数据和t04的内容一样,都是10万行一样的数据,但他们的.ibd数据文件都是一样大。这里的问题就是弄不明白 M和w的意思,求高手说个明白。

求职 : Linux运维
论坛徽章:
203
拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:182015年亚洲杯之约旦
日期:2015-04-05 20:08:292015年亚洲杯之澳大利亚
日期:2015-04-09 09:25:552015年亚洲杯之约旦
日期:2015-04-10 17:34:102015年亚洲杯之巴勒斯坦
日期:2015-04-10 17:35:342015年亚洲杯之日本
日期:2015-04-16 16:28:552015年亚洲杯纪念徽章
日期:2015-04-27 23:29:17操作系统版块每日发帖之星
日期:2015-06-06 22:20:00操作系统版块每日发帖之星
日期:2015-06-09 22:20:00
2 [报告]
发表于 2015-06-25 22:22 |只看该作者
M是代表定义的长度值,是30 byte   

论坛徽章:
0
3 [报告]
发表于 2015-06-26 09:21 |只看该作者
如果是30byte,那latin1的应该w=1,应该是10byte,可是两个表的数据文件大小一样,这个怎么解释?回复 2# lyhabc


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP