mysql 字符集
2015-06-04 13:34
459 查看
通过官方文档可知一行最多存65535个字节。
utf-8 字符测试
1 建表 一个汉字在utf-8中占3个字节通过计算65535/3 可以得出每行最多存21845,建表创建失败 原因是varchar(N)的前两个字符是表是varchar的长度。字符为空时存储是从第二位是从第2位开始,也就是N=(65535-2-1)/3 =21845
2 插入数据比较表的字节变化查看空表所占字节 空表所占字节 16384
插入数据
查看表的变化并计算 (备注这是测试中插入两行后的要除2)
计算表的大小147456/2-16384-1=65535 (1 是表中标注1行占用的字节)字符数查看 select char_length(a1),length(a1) from tb_utf8;
验证验证为空和不为空时字符占用
varchar (21844) 后正好占用65533个字节 tinyint类型占用一个自己 65535=65532+2+1varchar 为空时验证
可以用看出为空需要一个字节去标示,表不能创建 结论: varchar 在utf-8中一个汉字占用3个字节, 数字和字母都占用一个字节。 为空需要一个字节去标示。
gbk 字符集测试
建表: 根据gbk编码一个汉字占用2个字节,一行最多有65535个字节和上边测试的为空时多占一个字节。可以计算出varchar(N) N在 varchar在为空和非空的值为空 (65535-2-1)/2 = 32766个汉字 非空 (65535-2)/2=32766.5 也就是非空状态下可以多建一个tinyint类型varchar为空建表varchar 非空建表
注释: 在建表时如果varchar超过规定字节数时会默认转换字符类型
插入数据后查看插入数据量
查看数据占用的字节插入前表
插入后
结论: 在gbk字符中varchar(N) ,N<=23766个汉字 。如果N 大于32766 mysql 会默认的转换字符类型。 gdk中能存32766个汉字或者数字字母。
latin1 字符集 测试
1character=1byte, 1汉字=2character,建表 因为在latin1 中一个字节=1个字符 ,建表时varchar(N) N 在varchar不为空的时 N=65533 为空时N=65532分别插入字母和汉字查看插入数据结果
可以看到插入的字符和汉字情况 通过计算插入汉字65523 ,插入汉字(65523-1)/2 个汉字。显示汉字长度不正确原因在插入汉字是如果汉字大于varchar(n) 中(N-1)/2 的值 ,N为 是奇数 。插入的值为:汉字个数+1空字符 汉字个数=(N-1)/2 结论 : latin1 中varchar(N) N 最多能插入65523 个字母或数字,能插入N/2 个汉字
相关文章推荐
- mysqldump备份时忽略某些表
- 在Windows系统中配置Mysql群集(Mysql Cluster)
- Mysql常用命令大全
- MYSQL 中GROUP BY
- MySQL主从同步失败
- 如何添加新数据库到MySQL主从复制列表
- mysql 中sql 查询 时间
- mysql存储过程(完善中)
- MySQL学习分享--Thread pool实现
- mysql 自动安装脚本
- mysql配置远程连接不上解决办法
- quartz储存方式之JDBC JobStoreTX
- mysql常用命令
- mysql常用命令
- 收缩Mysql的ibdata1文件大小方法
- MySQL的备份与还原
- Mysql管理之二进制日志文件的管理
- Windows下更改MySQL数据库的存储位置
- 在MySQL字段中使用逗号分隔符的方法分享
- [转载]SET FOREIGN_KEY_CHECKS=0;在Mysql中取消外键约束