前后端交互体验,通常遇到字段长度限制问题。数据库字段有长度限制,所以前端也得相应做长度限制。那么问题来了,mysql VARCHAR长度是字节还是字符?这将会决定前后端长度限制如何对应。

一查资料,百分之90资料显示是字节,遇到中文字符还得计算转换。这不对啊,平常使用并没有关注长度计算转换,为啥如此。

在MySQL中,VARCHAR的长度定义在不同版本中确实存在差异,这可能是导致网络上资料混乱的原因之一。以下是关于VARCHAR长度单位以及版本差异的详细说明:

VARCHAR长度单位

  • MySQL 5.0及以上版本VARCHAR(N)中的N表示字符数,而不是字节数。这意味着VARCHAR字段可以存储最多N个字符,无论这些字符是单字节(如英文字母)还是多字节(如中文字符)。
  • MySQL 4.1及以下版本VARCHAR的长度是以字节为单位的。例如,使用UTF-8字符集时,一个汉字占3个字节,因此VARCHAR(100)只能存储约33个汉字。

版本差异

  • MySQL 4.1及以下版本VARCHAR的最大长度为255字节。
  • MySQL 5.0及以上版本VARCHAR的最大长度为65535字符,但实际存储大小会受到字符集和行大小限制的影响。例如,在UTF-8字符集中,由于一个字符可能占用多个字节,因此实际存储的字节数可能会超过N

为什么网络上的资料大多是错的?

  1. 版本混淆:许多资料没有明确指出其讨论的MySQL版本,导致读者容易混淆。不同版本的VARCHAR定义方式不同,容易造成误解。
  2. 字符集影响VARCHAR的实际存储大小与字符集有关。例如,UTF-8字符集中一个字符可能占用1到4个字节,这使得一些资料在描述时不够准确。

总结

  • 在MySQL 5.0及以上版本中,VARCHAR的长度单位是字符,最大长度为65535字符。
  • 在MySQL 4.1及以下版本中,VARCHAR的长度单位是字节,最大长度为255字节。
  • 网络上的资料错误可能是因为没有明确版本或没有考虑字符集的影响。

现在通常使用5.0以上的新版本,这个变化还是挺人性化的,前后端长度保持一样就行了


断树绳
1 声望0 粉丝

下一篇 »
lombok的坑