GreatSQL社区

搜索

MySQL中char与varchar有什么区别?

2503 1 2022-8-18 16:06
MySQL中char与varchar有什么区别?
全部回复(1)
GreatSQL万答 2022-8-18 16:11:08
本帖最后由 GreatSQL万答 于 2022-8-19 14:14 编辑

1.实验场景
GreatSQL 8.0.25 InnoDB

2.实验测试
2.1 区别
参数 char varchar
长度是否可变 定长 变长
存储容量 0 ~ 255 0 ~ 65,535
2.2 建测试表
  1. CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
复制代码
2.3 未超出设定值测试
字段V、C都写入一个4+空格的字符
  1. [root@GreatSQL][test]> INSERT INTO vc VALUES ('4 ', '4 ');
  2. [root@GreatSQL][test]> SELECT CONCAT('(', v, ')'), CONCAT('(', c, ')') FROM vc;
  3. +---------------------+---------------------+
  4. | CONCAT('(', v, ')') | CONCAT('(', c, ')') |
  5. +---------------------+---------------------+
  6. | (4 )                | (4)                 |
  7. +---------------------+---------------------+
  8. 1 rows in set (0.00 sec)
复制代码
测试结果,char的长度维持不变,占了2个字符,varchar空格长度变了,占了一个字符。
2.4 超出设定值测试
当写入长度大于设定长度时候,出现报错
  1. [root@GreatSQL][test]>INSERT INTO vc VALUES ('123456', '123456');
  2. ERROR 1406 (22001): Data too long for column 'v' at row 1
复制代码
调整sql_mode,再写入的时候,自动截取限制容量内的内容
  1. [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"
  2. [root@GreatSQL][test]>INSERT INTO vc VALUES ('123456', '123456');            
  3. Query OK, 1 row affected, 2 warnings (0.02 sec)
  4. [root@GreatSQL][test]>select * from vc;
  5. +------+------+
  6. | v    | c    |
  7. +------+------+
  8. | 1234 | 1234 |
  9. +------+------+
  10. 1 row in set (0.00 sec)
复制代码
2.5 字段长度测试
创建表,设置CHAR长度为256, 结果提示错误
  1. [root@GreatSQL][test]>CREATE TABLE vc (v VARCHAR(255), c CHAR(256));
  2. 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
GreatSQL万答

22

主题

0

博客

73

贡献

版主

Rank: 7Rank: 7Rank: 7

积分
117

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2024-11-21 16:41 , Processed in 0.020705 second(s), 15 queries , Redis On.
快速回复 返回顶部 返回列表