zoukankan      html  css  js  c++  java
  • MySQL varchar计算:求列的数目和计算N的最大值

    若一张表中只有一个字段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   (*int类型占用4个字节)

  • 相关阅读:
    圈水池 nyoj 78 凸包算法
    凸包算法入门
    nyoj 633 幂
    软件下载地址
    概率论与数理统计
    迷宫最短路径 问题
    将项目发布至开发环境测试环境的方法
    一些JavaScript技巧
    随机生成10个不重复的0-100的数字
    Git添加远程库和从远程库中获取(新手傻瓜式教学)
  • 原文地址:https://www.cnblogs.com/vo-ov/p/3653783.html
Copyright © 2011-2022 走看看