MySQL中char与varchar有什么区别

Posted 老叶茶馆_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL中char与varchar有什么区别相关的知识,希望对你有一定的参考价值。

* GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。

1.实验场景

GreatSQL 8.0.25 InnoDB

2.实验测试

2.1 区别

参数charvarchar
长度是否可变定长变长
存储容量0 ~ 2550 ~ 65,535

2.2 建测试表

CREATE TABLE vc (v VARCHAR(4), c CHAR(4));

2.3 未超出设定值测试

字段V、C都写入一个4+空格的字符

[root@GreatSQL][test]> INSERT INTO vc VALUES ('4 ', '4 ');

[root@GreatSQL][test]> SELECT CONCAT('(', v, ')'), CONCAT('(', c, ')') FROM vc;
+---------------------+---------------------+
| CONCAT('(', v, ')') | CONCAT('(', c, ')') |
+---------------------+---------------------+
| (4 )                | (4)                 |
+---------------------+---------------------+
1 rows in set (0.00 sec)

测试结果,char的长度维持不变,占了2个字符,varchar空格长度变了,占了一个字符。

2.4 超出设定值测试

当写入长度大于设定长度时候,出现报错

[root@GreatSQL][test]>INSERT INTO vc VALUES ('123456', '123456');
ERROR 1406 (22001): Data too long for column 'v' at row 1

调整sql_mode,再写入的时候,自动截取限制容量内的内容

[root@GreatSQL][test]>set session sql_mode="ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

[root@GreatSQL][test]>INSERT INTO vc VALUES ('123456', '123456');            
Query OK, 1 row affected, 2 warnings (0.02 sec)

[root@GreatSQL][test]>select * from vc;
+------+------+
| v    | c    |
+------+------+
| 1234 | 1234 |
+------+------+
1 row in set (0.00 sec)

2.5 字段长度测试

创建表,设置CHAR长度为256, 结果提示错误

[root@GreatSQL][test]>CREATE TABLE vc (v VARCHAR(255), c CHAR(256));
ERROR 1074 (42000): Column length too big for column 'c' (max = 255); use BLOB or TEXT instead

3.使用建议

  • 频繁改动的字段类型建议使用varchar。

  • 基本不会变动的字段类型建议使用char类型,这样可以节省一些存储空间。

  • 如果需要创建索引那么也建议使用char类型,因为char类型能有效避免因字段变化而产生的索引碎片,提高索引性能。

更多细节请参阅官方文档:

https://dev.mysql.com/doc/refman/8.0/en/char.html

Enjoy GreatSQL :)


《零基础学习MySQL》视频课程

戳此小程序即可直达腾讯课堂

或复制链接在浏览器中打开

  • https://ke.qq.com/course/4333819


文章推荐:


点击文末“阅读原文”直达老叶专栏

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

MySQL中varchar与char区别

char与varchar的区别

MySQL中varchar与char区别

mysql中char,varchar与text类型的区别

MYSQL, char 与 varchar的区别!

mysql中char,varchar与text类型的区别和选用