Heim >Datenbank >MySQL-Tutorial >MySQL varchar计算:求列的数目和计算N的最大值_MySQL

MySQL varchar计算:求列的数目和计算N的最大值_MySQL

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-01 13:28:481305Durchsuche

bitsCN.com

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编码限制

bitsCN.com
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn