varchar(N)的知识

  varchar(N)表示字段最多能保存N个字符(不是字节,MySQL早期版本才是字节),一个汉字算一个字符。
 
  需要注意的是网上涉及到varchar长度的文章大多都是基于字节单位讨论的,而不是字符单位。varchar的最大长度的确是65535个字节,但是由于varchar需要用2个字节保存字符串长度,所以实际可用长度为65533个字节,转成字符数时还会受到字符集的影响,例如在utf8中一个字符占3个字节,所以varchar最大长度为65533÷3≈21844个字符,而在utf8mb4中一个字符占4个字节,所以varchar最大长度为65533÷4≈16383个字符。
 
  需要特别说明的是在同一张表中varchar最大长度限制是所有char字段和varchar字段共享的(以下均假设字符集为utf8mb4),例如某表有三个varchar字段,长度分别是varchar(N1)、varchar(N2)、varchar(N3),那么(N1+N2+N3)不能大于16383。最极端的情况是创建了一个varchar(16383)字段就无法再创建varchar字段,或者只能创建varchar(0)字段。
 
  varchar(255)和varchar(256)的区别:长度不超过255只需要1个字节保存字符串长度,长度超过255则需要2个字节保存字符串长度。在创建字段时如果不指定长度,那么char和varchar都默认为255,所以如果没有特殊需求一般使用varchar(255)。
 
  在插入记录时如果字段值长度超过了N就会报“Fatal error”,所以应该先用mb_strlen()获取字段值长度,确保其没有超过N再插入。

Copyright © 2024 码农人生. All Rights Reserved