MySQL varchar计算:求列的数目和计算N的最大值
来源:互联网 发布:域名出售 编辑:程序博客网 时间:2024/06/06 02:37
有道面试题:若一张表中只有一个字段VARCHAR(N)类型,utf8编码,则N最大值为多少?
先明白计算的一些规则限制
① 存储限制
需要额外地在长度列表上存放实际的字符长度:小于255为1个字节,大于255则要2个字节
② 编码限制
gbk:每个字符最多占用2个字节
utf8:每个字符最多占用3个字节
③ 长度限制
MySQL定义行的长度不能超过65535,这个限制了列的数目,比如char(255) utf8
那么列的数目最多有65535/(255*3)=85,列的数目可以从这里得到依据
行长度计算公式如下:
row length = 1
+ (sum of column lengths)
+ (number of NULL columns + delete_flag + 7)/8
+ (number of variable-length columns)
① 对于MyISAM,需要额外1个位来记录值是否为NULL;对于InnoDB,没有区别
② 对于row_format为fixed,delete_flag为1;对于row_format=dynamic,delete_flag为0
根据这个公式,我们便能够解答开头N的最大值:(65535-1-2)/3
减1是因为实际存储从第2个字节开始
减2则因为要在列表长度存储实际字符长度
除3是因为utf8编码限制
再来一道:
create table t4(c int, c2 char(30), c3 varchar(N)) charset=utf8;
N的最大值:(65535-1-2-4-30*3)/3
参考资料
http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html
http://dinglin.iteye.com/blog/914276
By 迦夜
2013-10-21
Good Luck
先明白计算的一些规则限制
① 存储限制
需要额外地在长度列表上存放实际的字符长度:小于255为1个字节,大于255则要2个字节
② 编码限制
gbk:每个字符最多占用2个字节
utf8:每个字符最多占用3个字节
③ 长度限制
MySQL定义行的长度不能超过65535,这个限制了列的数目,比如char(255) utf8
那么列的数目最多有65535/(255*3)=85,列的数目可以从这里得到依据
行长度计算公式如下:
row length = 1
+ (sum of column lengths)
+ (number of NULL columns + delete_flag + 7)/8
+ (number of variable-length columns)
① 对于MyISAM,需要额外1个位来记录值是否为NULL;对于InnoDB,没有区别
② 对于row_format为fixed,delete_flag为1;对于row_format=dynamic,delete_flag为0
根据这个公式,我们便能够解答开头N的最大值:(65535-1-2)/3
减1是因为实际存储从第2个字节开始
减2则因为要在列表长度存储实际字符长度
除3是因为utf8编码限制
再来一道:
create table t4(c int, c2 char(30), c3 varchar(N)) charset=utf8;
N的最大值:(65535-1-2-4-30*3)/3
参考资料
http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html
http://dinglin.iteye.com/blog/914276
By 迦夜
2013-10-21
Good Luck
- MySQL varchar计算:求列的数目和计算N的最大值
- 计算两数的乘积,求最大值
- 计算牛的数目
- 求n的最大值
- 计算素数小于非负数的数目,n。
- 求n个数的最大值和最小值
- 计算DataGridView列的和
- 计算组合数据的数目
- 计算计算机的色彩数目
- mysql varchar和char类型在不同字符集下的字符数和字节数计算
- 求n个数和为m的组合数目
- 计算4个数的最大值
- 计算两整数的最大值
- 计算两整数的最大值
- 计算两整数的最大值
- datatable中求3列的最大值和最小值
- 计算由N个五角形组成的圈的生成树的数目
- C++统计正数数目和负数的数目,并计算平均值
- iOS多线程的初步研究(三)-- NSRunLoop
- 一段OD脚本
- Java 终止线程
- iOS多线程的初步研究(四)-- NSTimer
- 0-1背包问题的动态规划解法
- MySQL varchar计算:求列的数目和计算N的最大值
- Linux无光盘安装yum
- 将项目打包成jar与生成对应的api帮助文档(也就是注解)
- 【Java工程师之路】[2-1.11]数据库索引
- mfc下简单实现radio使用
- 堆排序 全面总结
- VISUAL C++ 系统及硬件编程
- Cocos2d-x 自定义宏函数管理LOG日志
- 字典树Trie树的应用