Mysql char和varchar之间的区别是什么

Mysql char和varchar之间的区别是什么,mysql,Mysql,我尝试按照下面的查询插入数据 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 ; 当我执行上述查询时,它将显示

我尝试按照下面的查询插入数据

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');
我发现VARCHAR是可变长度的。CHAR是固定长度的

那你的意思是什么

VARCHAR是可变长度的。

字符的长度是固定的。

VARCHAR(5)最多使用5个字符的存储空间,而CHAR(5)总是正好使用5个字符


例如,对于一个包含人名的字段,您可能希望使用VARCHAR,因为一般来说,一个人的名字通常很短,但您仍然希望处理少数几个名字很长的人,而不必浪费大部分数据库行的空间。

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

例如

列:用户名 类型:字符(10)

如果您有列username上的数据,即“test”,它将使用10个字节。它将有空间

“测试”

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

“测试”


谢谢。

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

当你说

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

另一方面

Char(5),如果存储在其中的数据长度为1,则剩余的 无法使用4字节内存空间。4字节将不被用户使用 任何其他数据。示例:“t_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”是未使用的空间


您是否在询问可变长度和固定长度之间的区别?是的,因为这两个字段返回相同的警告。那么区别是什么呢。它们在数据库中占用的空间不同。
VARCHAR是可变长度的。
并不意味着它会动态地增加数据大小,如果长度设置为100,并且您要添加长度为60 char的内容,那么将不会分配40的剩余空间,从而节省空间。在char中不一样,如果你说char(10)并添加len 1的char,那么整个空间都将被使用。@bartdude-还有最小值!实际上,
VARCHAR
也需要一些存储来保存长度,因此
VARCHAR(5)
将使用1到6个字节。这就是为什么我说的是“字符”,而不是“字节”。好的,但您仍然需要提到,它还将为长度添加存储空间。
Warning: #1265 Data truncated for column 'country' at row 1
Warning: #1265 Data truncated for column 'state' at row 1