【问题标题】:What is difference between char and varcharchar和varchar有什么区别
【发布时间】:2014-08-30 05:08:22
【问题描述】:
CREATE TABLE IF NOT EXISTS `test` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `country` varchar(5) NOT NULL,
  `state` char(5) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

我尝试了以下查询来插入数据

INSERT INTO `test`.`test` (`id` ,`country` ,`state`)
VALUES (NULL , 'south-india', 'Gujarat');

当我执行上述查询时,它会显示以下警告

Warning: #1265 Data truncated for column 'country' at row 1
Warning: #1265 Data truncated for column 'state' at row 1

我发现Reference VARCHAR 是可变长度的。CHAR 是固定长度的。

那么你的意思是

VARCHAR 是可变长度的。

CHAR 是固定长度的。

【问题讨论】:

  • 你是问变长和定长有什么区别吗?
  • 是的,因为两个字段都返回相同的警告。那有什么区别呢。
  • 它们在数据库中占用的空间不同。
  • VARCHAR is variable-length. 并不意味着它会即时增加数据大小,如果长度设置为 100 并且您要添加长度为 60 字符的内容,则不会分配 40 的剩余空间,因此它节省空间。在 char 中,如果您说 char(10) 并添加一个 len 1 的 char,则将使用整个空间。
  • @bartdude - 还有最低要求!

标签: mysql


【解决方案1】:

VARCHAR(5) 将使用 最多 5 个字符的存储空间,而 CHAR(5) 将始终使用 完全 5 个字符。

例如,对于包含人名的字段,您可能希望使用 VARCHAR,因为虽然平均而言某人的名字通常很短,但您仍然希望处理少数名字很长的人,而不必为您的大多数数据库行浪费了该空间。

【讨论】:

  • 实际上,VARCHAR 也需要一些存储空间来保存长度,因此VARCHAR(5) 将使用 1 到 6 个字节。
  • 这就是我说“字符”而不是“字节”的原因。
  • OK,不过还是需要提一下,它还会为长度增加存储空间。
【解决方案2】:

正如您所说,varchar 是可变长度的,而 char 是固定的。但主要区别在于它使用的字节。

示例。

列:用户名 类型:char(10)

如果您的用户名列上有数据,即“测试”,它将使用 10 个字节。它会有空间。

'测试______'

因此 varchar 列将只使用您使用的字节。对于“测试”,它将仅使用 4 个字节。你的数据将是

'测试'

谢谢。

【讨论】:

    【解决方案3】:

    正如您提到的,VARCHAR 是可变长度的。 CHAR 是固定长度的。

    当你说

    Varchar(5) 如果你存储的数据长度为 1,则 剩余的 4 字节内存空间将被其他人使用。示例:“t”

    另一方面

    Char(5) 如果你存储的数据长度为 1,剩下的 不能使用 4 字节内存空间。 4 字节最终不会被 任何其他数据。例如:“t____”这里____是未使用的空间。

    【讨论】:

      猜你喜欢
      • 2010-12-25
      • 2015-12-12
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 2014-05-03
      • 2020-06-26
      • 2010-12-14
      相关资源
      最近更新 更多