char和varchar有啥区别

Posted

技术标签:

【中文标题】char和varchar有啥区别【英文标题】: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 - 还有最低要求! 【参考方案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____”这里____是未使用的空间。

【讨论】:

以上是关于char和varchar有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

char和varchar有啥区别

SQL中varchar和nvarchar有啥区别?

sql 中int nvarchar char VARchar 有啥区别

使用 CHAR 比使用 VARCHAR 有啥好处?

Oracle中的varchar和varchar2有啥区别?

char与varchar的区别