varchar(3)和varchar(300)有什么区别

时间:2017-04-15 05:33:29

标签: mysql

我们知道varchar是一个可变长度数据类型,那么mysql中varchar(3)和varchar(300)的区别是什么?

2 个答案:

答案 0 :(得分:3)

在SQL varchar中是一个长度不一的字符串。传统上,您为此字符串指定上限。以下是有关varchar的一些事项:

  • 短于指定限制的字符串不占用额外空间:它们只占用所需空间。
  • 如果字符串超过限制,则当您尝试INSERT记录时以及尝试UPDATE记录时,整个记录都会被拒绝。
  • 传统上上限为255个字符。现代数据库不再具有此限制。
  • 某些数据库(例如PostgreSQL)建议您不再以这种方式指定长度。相反,他们建议使用无限制的字符串(varchar没有长度),并使用CHECK CONSTRAINT来限制它。
  • 大多数现代数据库比过去更有效地处理字符串,因此不需要对字符串的大小进行限制。

对您的问题的简短回答是varchar(3)varchar(300)都是有限长度的字符串,并且两者都允许更短的字符串而不会受到惩罚。然而,显然一个很多比另一个短。

答案 1 :(得分:1)

除了@Manngo's answer之外,varchar(300)还有一个额外字节的开销,而不是varchar(3),因为它的最大值超过了255.来自the MySQL docs ...

  

与CHAR相比,VARCHAR值存储为1字节或2字节长度前缀加数据。长度前缀表示值中的字节数。如果值不超过255个字节,则列使用一个长度字节;如果值可能需要超过255个字节,则列使用两个长度字节。

基本上,必须存储字符串的长度。 1个字节只能容纳0到255,因此需要2个字节来存储最长可达300的长度。

  

假设我想在我的列中插入单个字符,那么两者之间有什么区别?为什么我们使用varchar(1)为什么不使用varchar(100)??

如果列只应存储单个字符,请使用char(1)一个字节,以确保数据的完整性(varchar(1)为两个字节)。这样可以确保使用该列的任何人都能获得他们期望的结果并且不必进行自己的数据验证。

由于varchar的大小只是一个最大值,因此指定较小的一个不会使该表使用任何较少的磁盘(除了上面提到的大约> 255)。避免向列中添加任意限制和业务规则。例如,如果您要存储网址或电子邮件地址,则没有理由不允许varchar(255)。基于业务规则和UX问题的限制应该在更高层进行,而不受数据库模式的限制。