VARCHAR和CHAR是两种最主要的字符串类型。它们的存储方式和数据检索方式都不一样。

VARCHAR和CHAR的数据检索效率:CHAR > VARCHAR

VARCHAR类型

VARCHAR类型用于存储可变长字符串,是最常见的字符串数据类型。它比定长类型更节省空间,因为它仅使用必要的空间。

VARCHAR类型的实际长度是它的值的实际长度+1,这一个字节用于保存实际使用了多大的长度。VARCHAR节省了存储空间,所以对性能也有帮助。

但是,由于行是变长的,在UPDATE时可能使行变得比原来更长,这就导致需要做额外的工作。

CHAR类型

CHAR类型用于存储定长字符串,CHAR字段上的索引效率级高。比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。CHAR值会根据需要采用空格进行填充以方便比较。

应用场景

VARCHAR类型适用于文章标题、商品名称、图片路径等字符串最大长度大于平均长度的列。

CHAR类型适用于存储密码的MD5值、手机号码、身份证号码、订单号等长度相对固定的列。

总结

该字段数据集的平均长度与最大长度是否相差很小,若相差很小优先考虑CHAR类型,反之,考虑VARCHAR类型。

若字段存储的是MD5后的哈希值,或一些定长的值,优先选取CHAR类型。

若字段经常需要更新,则优先考虑CHAR类型,由于CHAR类型为定长,因此不容易产生碎片。

对于字段值存储很小的信息,优先选取CHAR类型,因为VARCHAR类型会占用额外的字节保存字符串长度信息。

当能够选取CHAR类型的时候,或者说空间消耗相对并不是影响因素的重点时,尽量选取CHAR类型,因为在其他方面,CHAR类型都有着或多或少的优势。而当空间消耗成为了很大的影响因素以后,则考虑使用VARCHAR类型。

mysql的char和varchar_MySQL中CHAR和VARCHAR的区别及应用场景相关推荐

  1. php使用hset报错,redis中set和hset的区别和使用场景

    下面由redis教程栏目给大家介绍redis中set和hset的区别和使用场景,希望对需要的朋友有所帮助! redis中存数据时,到底什么时候用 hset 相比于 set 存数据时又有什么不一样? s ...

  2. C#中抽象类和接口的区别与应用场景

    一直对这两个基础概念没有很好的认识,在网上发现一个我能够理解的基础概念理解,存一下,反复看. C#中抽象类和接口的区别与应用场景一. 1.抽象类:抽象类是特殊的类,只是不能被实例化;和普通类一样里面什 ...

  3. mysql in varchar_MySQL中char和varchar有啥区别?优缺点是啥?

    在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定的长度,而varchar属于可变长的字符类型. char与varchar的区别 c ...

  4. java char 打印_Java中char[]输出不是内存地址的原因详解

    前言 Java中共有八种基本数据类型:byte,int,short,long,float,double,char,boolean. 计算机中的基础数据单位是bit, 1byte=8bit. 数据类型 ...

  5. java Char与char_JAVAc++中char和char[]的区别

    JAVAc++中char和char[]的区别 (2011-05-17 09:25:45) 标签: 杂谈 地方. 但是留意p1.p2自身是在栈中的. 2. 2申请后系统的响应 栈:只要栈的剩余空间大于所 ...

  6. mysql id in set_mysql数据库中find_in_set()和in()用法区别

    mysql数据库中find_in_set()和in()用法区别 (2015-07-19 08:30:21) 标签: mysql数据库 find_in_set 在mysql中in可以包括指定的数字,而f ...

  7. mysql的char和varchar_MySQL的char和varchar

    1.varchar类型的变化 MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定).在 MySQL5.0以 ...

  8. mysql char(36)_MySQL中char(36)被认为是GUID导致的BUG及解决方案

    有时候在使用Toad或在程序中,偶尔会遇到如下的错误: System.FormatException GUID 应包含带 4 个短划线的 32 位数(xxxxxxxx-xxxx-xxxx-xxxx-x ...

  9. mysql char(36)_MySQL中char(36)被認為是GUID導致的BUG及解決方案

    轉載地址:http://www.cnblogs.com/end/archive/2012/12/26/2834068.html (近日正好有一個項目需要用到C#來操作MySQL數據庫,遇到這個奇怪的問 ...

最新文章

  1. 机器人纹身师出世,你敢让它帮你纹身吗?
  2. redis异常解决:JedisDataException: ERR Client sent AUTH, but no password is set
  3. wine: Unhandled page fault on read access to 0x00000000 at address 0x10b1fb8
  4. JS中的THIS处理及正则表达式 — 1、callapplyjson
  5. VS启动多个实例调试
  6. 实现Singleton模式
  7. STM32F103ZET6 PWM输出
  8. php用高德地图api坐标返回市_php 使用高德地图(一) 画多边形及编辑 获取坐标 (简单总结)...
  9. MSM8960处理器概述
  10. python怎么编写口算题_用Python开发小学二年级口算自动出题程序
  11. 重启电脑后MySQL数据丢失_为什么当我重启电脑时会出现数据丢失?
  12. python实例方法不可以用类调用_python中可以直接用类调用方法吗
  13. 怎样将cad布局导出来_CAD如何将布局里面的内容输出为 *.dwg文件? | 怎么把cad 中的数据输出...
  14. 因果推断笔记——因果图建模之Uber开源的CausalML(十二)
  15. Linux 配置nginx和php代理 ip访问
  16. 关于H5播放视频文件的问题
  17. 广州大学 计算机基础,广州大学计算机应用基础试卷A卷
  18. 自动称重管理软件功能如何助力企业实现信息化(一)
  19. 【C++】密钥加密法(指针应用)
  20. 量化金融干货丨如何使用DolphinDB快速计算K线

热门文章

  1. Ubuntu14.04虚拟机下基本操作(typical安装)
  2. 南怀瑾 100句 渺小_让我们与tinyGo一起变得渺小
  3. 盘点百度搜索算法大全(2022最新版)
  4. 手写max,min,abs函数
  5. 机器学习分支之一:强化学习
  6. PostgreSQL密码重置方法
  7. 微信公众号三方平台开发【帐号注册、平台创建】
  8. opencv 利用傅里叶变换获取低频和高频部分图像-07
  9. kmeans初始中心不同结果可能不同 (举例)
  10. OpenCV-Python投影透视变换函数getPerspectiveTransform及warpPerspective详解