ITPub博客

首页 > 数据库 > MySQL > MySQL之vachar

MySQL之vachar

原创 MySQL 作者:541732025 时间:2014-06-23 15:50:58 0 删除 编辑
5.0.3之前,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节),最大0-255个字节。

5.0.3之后,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节(这个表所有列加起来大小)
在建表时,当超过长度限制,MySql会报错,建议使用TEXT或者BLOB;而当INSERT数据时,如果VALUE超出VARCHAR声明时的长度,则会自动被截断。

varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),
另外,开头还有1个字节存放其它一些控制信息。


a) 若一个表只有一个varchar类型,如定义为
  create table t1(c varchar(N)) charset = gbk;
  则此处N的最大值为(65535-1-2)/2= 32766。
  减1的原因是实际行存储从第二个字节开始;
  减2的原因是varchar头部的2个字节表示长度;
  除2的原因是字符编码是gbk。

如下图:使用最大值32766时,正确创建。


如果若使用32767,MySql则会报出异常,创建失败。


b) 若一个表定义为
  create table t2(i int, c char(30), ch varchar(N)) charset=utf8;
  则此处N的最大值为 (65535-1-2-4-30*3)/3=21812
  减1和减2与上例相同;
  减4的原因是int类型的c占4个字节;
  减30*3的原因是char(30)占用90个字节,编码是utf8。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28912557/viewspace-1191886/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: MySQL之in与exists
请登录后发表评论 登录
全部评论

注册时间:2013-05-23

  • 博文量
    127
  • 访问量
    515717