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有啥区别的主要内容,如果未能解决你的问题,请参考以下文章