网站首页 > 技术文章 正文
CHAR与VARCHAR
char与varchar都是用来存储字符串的,但他们保存和检索的方式不同。char属于固定长度的字符类型,varchar属于可变长度的字符类型。
char是固定长度的,所以它的处理速度比varchar快得多,但是其缺点是浪费存储空间。对于长度变化不大并且对查询速度有较高要求的数据可以考虑使用char类型来存储。
不同的存储引擎对char和varchar的使用原则不同。
MyISAM存储引擎:建议使用固定长度的数据列代替可变长度的数据列。
InnoDB存储引擎:建议使用varchar类型。对于InnoDB数据表,内部的行存储格式没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),因此在本质上, 使用固定长度的char列不一定比使用可变长度varchar列性能要好。因而,主要的性能因素是数据行使用的存储总量。由于char平均占用的空间多余varchar,因此使用varchar来最小化需要处理的数据行的存储总量和磁盘I/O是比较好的。
Text与Blob
在保存较大文本时,通常会使用text或者blob。二者之间的主要差别是blob能用来保存二进制数据,text只能保存字符数据。
text类型包括text、mediumText、LongText。blob类型包括blob、mediumBlob、LongBlob。这些类型只是存储文本长度或存储字节不同。
Blob和Text值会引起一些性能问题,特别是在执行了大量的删除操作时。删除操作会在数据表中留下很大的“空洞”,为了提高性能,建议定期使用OPTIMIZE TABLE功能对这类表进行碎片整理,避免因为“空洞”导致性能问题。
在不必要的时候避免检索大型的blob或text值。例如,select * 查询就不是很好的想法,除非能够确定作为约束条件的where子句只会找到所需要的数据行。否则很可能毫无目的地在网络上传输大量的值。用户可以搜索索引列,决定需要哪些数据行,然后从符合条件的数据行检索blob或text值。
在某些环境中,如果把这些数据列移动到第二章数据表中,可以把原数据表中的数据列转换为固定长度的数据行格式,这会减少主表中的碎片,可以得到固定长度数据行的性能优势。它还可以使主数据表在运行 select * 查询的时候不会通过网络传输大量的blob或text值。
浮点数与定点数
浮点数一般用于表示含有小数部分的数值。如果插入数据的经度超过该列定义的实际精度,则插入值会被四舍五入到实际定义的精度值,然后插入。MySQL中Float、Double用来表示浮点数。
定点数不同于浮点数,定点数实际上是以字符串形式存放的,多以定点数可以更精确地保存数据。如果实际插入的数值精度大于定义的精度,MySQL则会进行警告或报错。
猜你喜欢
- 2025-07-02 「嵌入式秘术」相约榨干SysTick的每一滴汁水
- 2025-07-02 WIDECHAR函数教程(widechar函数没有为什么)
- 2025-07-02 计算机二级考试(计算机二级考试费用)
- 2025-07-02 Mysql中int(10)和char(10)以及varchar(10)区别
- 2025-07-02 在 WinCC 中如何显示和操作 S7-300/400 中的 CHAR 和 STRING 类型的数据
- 2025-07-02 在 WinCC 中操作 S7-1200/1500 中的 CHAR 和 STRING 类型的数据
- 2025-07-02 varchar和char到底用哪个呢?(varchar跟char)
- 2025-07-02 to_char()、to_date()的区别(to_date和to_timestamp)
- 2025-07-02 30.MySQL中char和varchar的比较(mysql varchar和nvarchar)
- 2025-07-02 8、char为什么能存贮一个汉字?(char为什么能存储汉字)
- 最近发表
-
- count(*)、count1(1)、count(主键)、count(字段) 哪个更快?
- 深入探索 Spring Boot3 中 MyBatis 的 association 标签用法
- js异步操作 Promise fetch API 带来的网络请求变革—仙盟创梦IDE
- HTTP状态码超详细说明_http 状态码有哪些
- 聊聊跨域的原理与解决方法_跨域解决方案及原理
- 告别懵圈!产品新人的接口文档轻松入门指南
- 在Javaweb中实现发送简单邮件_java web发布
- 优化必备基础:Oracle中常见的三种表连接方式
- Oracle常用工具使用 - AWR_oracle工具有哪些
- 搭载USB 3.1接口:msi 微星 发布 990FXA Gaming 游戏主板
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)