在建立数据库表结构的时候,为了给一个String类型的数据定义一个数据库的数据库类型,一般参考的都是char或者varchar,这两种选择有时候让人很纠结,今天想总结一下它们两者的区别,明确一下选择塔门的理由。

首先明确的是,char的长度是不可变的,而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[10],如果存进去的是‘blog’,那么char所占的长度依然为10,除了字符‘blog’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的。

尽管如此,char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。再者,char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据。

在MySQL中用来判断是否需要进行对据列类型转换的规则

1、在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的.

2、只要数据表里有一个数据列的长度的可变的,那么各数据行的长度都是可变的.

3、如果某个数据表里的数据行的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型.

例外:长度小于4个字符的char数据列不会被转换为varchar类型

对于MyISAM表,尽量使用Char,对于那些经常需要修改而容易形成碎片的myisam和isam数据表就更是如此,它的缺点就是占用磁盘空间;

对于InnoDB表,因为它的数据行内部存储格式对固定长度的数据行和可变长度的数据行不加区分(所有数据行共用一个表头部分,这个标头部分存放着指向各有关数据列的指针),所以使用char类型不见得会比使用varchar类型好。事实上,因为char类型通常要比varchar类型占用更多的空间,所以从减少空间占用量和减少磁盘i/o的角度,使用varchar类型反而更有利.

mysql中char是什么意思_mysql中char与varchar的区别相关推荐

  1. mysql 修改字段类型为字符串_MySQL中字段类型与合理的选择字段类型

    原标题:MySQL中字段类型与合理的选择字段类型 字段类型 数值 MySQL 的数值数据类型可以大致划分为两个类别,一个是 整数,另一个是 浮点数或小数. 许多不同的子类型对这些类别中的每一个都是可用 ...

  2. mysql什么情况会加意向锁_MySQL中的锁4-插入意向锁和自增锁

    插入意向锁(Insert Intention Lock) 插入意向锁本质上可以看成是一个Gap Lock 普通的Gap Lock 不允许 在 (上一条记录,本记录) 范围内插入数据 插入意向锁Gap ...

  3. mysql中存储引擎是啥_mysql中的存储引擎

    mysql存储引擎概述 什么是存储引擎? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力. ...

  4. mysql去重函数的使用方法_MySQL中使用去重distinct方法的示例详解

    一 distinct 含义:distinct用来查询不重复记录的条数,即distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而 ...

  5. mysql截取前几个字符串_mysql中截取指定字符前后的字符串

    使用SUBSTRING_INDEX()函数 substring_index(str,delim,count) str:要处理的字符串 delim:分隔符 count:分隔符计数 例子 取出上述表中数组 ...

  6. mysql的视图的名词解释_MySql中的视图的概念及应用

    视图的基本概念 视图是从一个或几个基本表(或者视图)导出的表.它与基本表不同,是一个虚表. 数据库只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中.所以基本表中的数据发生变化, ...

  7. mysql从库追主库日志_MySQL 中主库跑太快,从库追不上怎么整?

    写这篇文章是因为之前有一次删库操作,需要进行批量删除数据,当时没有控制好删除速度 ,导致产生了主从延迟,出现了一点小事故. 今天我们就来看看为什么会产生主从延迟以及主从延迟如何处理等相关问题. 坐好了 ...

  8. mysql int类型需要指定长度_mysql中整数类型后面的数字,是不是指定这个字段的长度?比如int(11),11代表11个字节吗?...

    原先对mysql不太理解,但也没有报错.但理解的不够深入.这次补上. 原来以为int(11)是指11个字节,int(10)就是10个字节.我错了. http://zhidao.baidu.com/li ...

  9. mysql 数字占几个字节_mysql中整数类型后面的数字,比如int(11),11代表11个字节吗?...

    原先对mysql不太理解,但也没有报错.但理解的不够深入.这次补上. 原来以为int(11)是指11个字节,int(10)就是10个字节.我错了. http://zhidao.baidu.com/li ...

最新文章

  1. 联想电脑 Realtek RTL8821CE 无线网卡 驱动安装 16.04/18.04
  2. 后台运行定位,音频,网络电话
  3. sqlplus 远程连接 oracle 12514 错误
  4. pomelo php,Nginx 502 Bad Gateway 自动重启shell脚本
  5. 鸿蒙HarmonyOS环境搭建与HelloWrold应用运行
  6. c语言入门自学书籍推荐6,菜鸟自学嵌入式之C语言基础No6 算法分析
  7. 「MacOS」无法打开***,因为无法验证开发者。
  8. matlab遍历cell和array的for循环写法
  9. Docker学习六:综合实践
  10. 【Linux 4,2021最新Java笔试题及答案
  11. 4.3.2 信道编码 ——卷积码
  12. 得空写的基于web的工作流表单设计器,大家看看怎么样
  13. 中兴校招c语言在线笔试题,中兴2021校招软件在线笔试题
  14. c+primer 学习笔记 6
  15. 小说程序源码 自动采集
  16. python拼图游戏代码的理解_Python编写的数字拼图游戏(含爬山算法人机对战功能)...
  17. Facade和Adapter
  18. webpack对css文件打包:css-loader和style-loader版本过高问题
  19. 计算机文档库怎么进,Windows电脑注册表怎么进?
  20. C语言,指针指针指针

热门文章

  1. 东北大学OJ-1208: 实验2-7 :计算ASCII码值并输出
  2. 设计评审CheckList
  3. java使用freemark实现word(.doc/.docx)/pdf生成和导出(附源码和模板文件)
  4. html 截取指定字符串长度,前端js截取指定长度个数字符 v2.0.0
  5. Python读书笔记-基础篇-1.万丈高楼平地起
  6. 文件名依照字符串和数字进行排序
  7. qq邮件服务器名字怎么填,qq邮箱名称应该填写什么?(写qq昵称不好使)
  8. HTML 表格合并(表格合并行属性 rowspan 将多行合并成一行)
  9. 2021高考昆山中学成绩查询,高考成绩查询即将开始!昆山这几所高中本科率惊人…...
  10. python控制手机模拟器_Appium+python自动化23-Android夜神模拟器