万答#11,MySQL中char与varchar有什么区别
万答#11,MySQL中char与varchar有什么区别
1.实验场景
GreatSQL 8.0.25 InnoDB
2.实验测试
2.1 区别
参数 | char | varchar |
---|---|---|
长度是否可变 | 定长 | 变长 |
存储容量 | 0 ~ 255 | 0 ~ 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.使用建议
- 频繁改动的字段类型建议使用char。
- 基本不会变动的字段类型建议使用varchar类型,这样可以节省一些存储空间。
- 如果需要创建索引那么也建议使用char类型,因为char类型能有效避免因字段变化而产生的索引碎片,提高索引性能。
更多细节请参阅官网:
https://dev.mysql.com/doc/refman/8.0/en/char.html
文章推荐:
技术分享 | MGR最佳实践(MGR Best Practice)
https://mp.weixin.qq.com/s/66u5K7a9u8GcE2KPn4kCaA
技术分享 | 万里数据库MGR Bug修复之路
https://mp.weixin.qq.com/s/IavpeP93haOKVBt7eO8luQ
Macos系统编译percona及部分函数在Macos系统上运算差异
https://mp.weixin.qq.com/s/jAbwicbRc1nQ0f2cIa_2nQ
技术分享 | 利用systemd管理MySQL单机多实例
https://mp.weixin.qq.com/s/iJjXwd0z1a6isUJtuAAHtQ
产品 | GreatSQL,打造更好的MGR生态
https://mp.weixin.qq.com/s/ByAjPOwHIwEPFtwC5jA28Q
产品 | GreatSQL MGR优化参考
https://mp.weixin.qq.com/s/5mL_ERRIjpdOuONian8_Ow
关于 GreatSQL
GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。
Gitee:
https://gitee.com/GreatSQL/GreatSQL
GitHub:
https://github.com/GreatSQL/GreatSQL
微信&QQ群:
可扫码添加GreatSQL社区助手微信好友,发送验证信息“加群”加入GreatSQL/MGR交流微信群,亦可直接扫码加入GreatSQL/MGR交流QQ群。
本文由博客一文多发平台 OpenWrite 发布!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下