mysql中char与varchar的区别分析

原文网址:http://www.jb51.net/article/23575.htm

mysql中char与varchar的区别分析

作者: 字体:[增加 减小] 类型:转载
在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定的长度,而varchar属于可变长的字符类型。
char与varchar的区别

char (13)长度固定, 如'www.jb51.net' 存储需要空间 12个字符

varchar(13) 可变长 如'www.jb51.net' 需要存储空间 13字符,

从上面可以看得出来char 长度是固定的,不管你存储的数据是多少他都会都固定的长度。而varchar则处可变长度但他要在总长度上加1字符,这个用来存储位置。所以实际应用中用户可以根据自己的数据类型来做。

再看看char,与varchar在速度上的区别吧。
复制代码 代码如下:

mysal>create tabe ab(v varchar(4),c char(4));
query ok ,0 rows affected(0.02 sec)
mysql>insert into abc values('ab ','ab ')
query ok ,1 row affected(0.00 sec);
mysql->select concat(v ,'+') ,concat(c ,'+') form abc
ab + | ab+
1rows in set (0.00 sec)

从上面可以看出来,由于某种原因char 固定长度,所以在处理速度上要比varchar快速很多,但是对费存储空间,所以对存储不大,但在速度上有要求的可以使用char类型,反之可以用varchar类型来实例。

注明:

在用char字符类型时内容后面有空间时必须作相关处理,要不就会把空格自动删除。

建意:

myisam 存储引擎 建议使用固定长度,数据列代替可变长度的数据列。
memory存储引擎 目前都使用固定数据行存储,因此无论使用char varchar列都没关系,
innodb 存储引擎 建意使用varchar 类型


以下是其它网友的补充


char是一种固定长度的类型,varchar则是一种可变长度的类型
   char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空 格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节).

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

  1、在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的.
  2、只要数据表里有一个数据列的长度的可变的,那么各数据行的长度都是可变的.
  3、如果某个数据表里的数据行的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型.
例外:长度小于4个字符的char数据列不会被转换为varchar类型

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

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

文章2:
字符应该是最常见的一种了,但似乎各个数据库都有所不同,比如oracle中就有啥varchar2之类。不过mysql似乎最多的还是集中在char和varchar上。
说 说区别。char是固定长度的,而varchar会根据具体的长度来使用存储空间。比如char(255)和varchar(255),在存储字符 串"hello world"的时候,char会用一块255的空间放那个11个字符,而varchar就不会用255个,他先计算长度后只用11个再加上计算的到字符串 长度信息,一般1-2个byte来,这样varchar在存储不确定长度的时候会大大减少存储空间。

如此看来varchar比char聪明多了,那char有用武之地吗?还是很不少优势的。

一,存储很短的信息,比如门牌号码101,201……这样很短的信息应该用char,因为varchar还要占个byte用于存储信息长度,本来打算节约存储的现在得不偿失。

二,固定长度的。比如使用uuid作为主键,那用char应该更合适。因为他固定长度,varchar动态根据长度的特性就消失了,而且还要占个长度信息。

三,十分频繁改变的column。因为varchar每次存储都要有额外的计算,得到长度等工作,如果一个非常频繁改变的,那就要有很多的精力用于计算,而这些对于char来说是不需要的。


还 有一个关于varchar的问题是,varchar他既然可以自动适应存储空间,那我varchar(8)和varchar(255)存储应该都是一样 的,那每次表设计的时候往大的方向去好了,免得以后不够用麻烦。这个思路对吗?答案是否定的。mysql会把表信息放到内存中(查询第一次后,就缓存住 了,linux下很明显,但windows下似乎没有,不知道为啥),这时内存的申请是按照固定长度来的,如果varchar很大就会有问题。所以还是应 该按需索取。

总结:仔细看DZ的数据表,定长的字段基本还都是用char....
597

转载于:https://www.cnblogs.com/wkhuahuo/p/4284352.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3W+字的设计模式手册

设计模式是对大家实际工作中写的各种代码进行高层次抽象的总结,其中最出名的当属 Gang of Four (GoF) 的分类了,他们将设计模式分类为 23 种经典的模式,根据用途我们又可以分为三大类,分别为创建型模式、结构型模式和行为型模式。…

datagridview 当前上下文中不存在bind_全面解析JavaScript中this指向问题

this指向参考文章:* thisJavaScript中this指向分为以下几种情况:普通函数或作为对象属性事件绑定构造函数箭头函数call/apply/bind指定下面我们来进行一一介绍普通函数或作为对象属性this取决于方法执行前面是否有“点”,有“点”的话&#x…

Unity Scene为每一个游戏物体进行扩展编辑

2个月前还在忙碌的找实习工作,看见招聘信息上面有一条熟悉扩展Unity编辑器,配合美工编程. 自己动手写完这个代码时候,发现写代码就像弹钢琴多么神奇. TestEdit类: using UnityEngine; using System.Collections; using UnityEditor;[CustomEditor(typeof(Test))] public class …

esmini LongSpeedAction修改

esmini的LongSpeedAction,如果shape设置为step的话,DynamicsDimension实际就无效了, 因为step的意思就是直接设置,在LongSpeedAction的Start过程中设置完就结束了,Step就不在 执行。 如果我们在step的情况下&#x…

cc2530i2c可同时接受两个传感器的数据吗_汽车方向及维修_玉树沃尔沃S40方向机,宝马531电子方向机进水可以维修吗...

产品品牌:徐州永诚汽车方向及维修公司产品单价:最小起订:23供货总量:2交货期限:13发货城市:徐州玉树沃尔沃S40方向机,宝马531电子方向机进水可以维修吗 [qadxfh3k]凭以往的经验,像这种多个控制模…

Android项目实战视频教程_快递轨迹查询应用开发

基于Android平台的快递轨迹查询应用开发全程实录(MenuDrawer、DbUtils、HttpUtils、讯飞语音识别)课程分类:Android适合人群:中级课时数量:10(17节)课时用到技术:MenuDrawer、DbUtils、HttpUtils、讯飞语音…

OpenXLSX 字段读取问题

在读取excel的时候发现有些字段无法读取,通过把excel文件解压后对比发现,正常读取和不 能正常读取的字段在sharedString.xml中存储的格式有差异,取其中一个字段,如下图: 正常读取的 不能读取的 对比可以看到其区别&a…

六西格玛dfss_六西格玛系列知识之二:六西格玛管理的基本原理

六西格玛管理是一系统,其系统性体现在它既提出了面向产品和服务设计开发的六西格玛设计,又提出了面向流程、产品制造、服务提供的六西格玛改进方法。从当前的情况来看,六西格玛设计(DFSS)项目推进尚未形成统一的或得到…

XCode5.1.1怎样实现代码块自己主动排版

1.问题描写叙述 在开发中常常遇到代码块须要排版的情况,假设一行一行缩进就太out了,但在xcode中怎样实现还真不知道2.解决方法 2.1选中须要排版的代码块 2.2单击"Editor | Structure | Re-Indent"菜单项 2.3看看是不是已经得到想要的结果了&am…

数据库监控[Z]

--查看表锁 select * from sys.v_$sqlarea where disk_reads>100--监控事例的等待 select event,sum(decode(wait_Time,0,0,1)) "Prev", sum(decode(wait_Time,0,1,0)) "Curr",count(*) "Tot"from v$session_Wait group by event order by 4 …

Could NOT find XXX (missing: XXX_LIBRARY XXX_DIR)

有时候从github上下载一些新的包编译时经常会缺少一些插件或库文件,比如 Could NOT find Bullet (missing: BULLET_DYNAMICS_LIBRARY BULLET_COLLISION_LIBRARY BULLET_MATH_LIBRARY BULLET_SOFTBODY_LIBRARY BULLET_INCLUDE_DIR) 或者 Could NOT find SDL (miss…

minheight能继承吗_民法典亮点盘点 | 侄子能继承叔叔的遗产吗?

2020年5月28日,十三届全国人大三次会议表决通过了《中华人民共和国民法典》,《民法典》将于2021年1月1日起施行。《民法典》共7编,依次为:总则编、物权编、合同编、人格权编、婚姻家庭编、继承编、侵权责任编,以及附则…

多C++标准版本指定

本文主要介绍 CMake 中 include 指令的相关知识。 1 概述 引用 CMake 官网对于 include 指令的介绍&#xff0c;如下&#xff1a; Load and run CMake code from a file or module. include 指令的用法如下&#xff1a; include(<file|module> [OPTIONAL] [RESULT_VA…

STL容器存储的内容动态分配情况下的内存管理

主要分两种情况&#xff1a;存储的内容是指针&#xff1b;存储的内容是实际对象。 看以下两段代码&#xff0c; typedef pair<VirObjTYPE, std::list<CheckID>*> VirObj_CheckID_pair;class LangChecker{public: LangChecker(); ~LangChecker(); voi…

一分二功率分配器_一文学会微波功率分配器

功率分配器是微波电路设计中常用的一个无源元器件&#xff0c;简称功分器&#xff0c;顾名思义&#xff0c;就是把一路输出功率按照一定的比例分配成N路功率输出的一种微波元器件&#xff0c;如下图所示&#xff0c;A端口进入的信号分成两路信号从C1和C2端口输出。当然&#xf…

MinGW编译boost库

介绍 在windows下编译boost可以选择msvc和mingw两种方式&#xff0c;这里介绍使用mingw方式编译,msvc也是类似的操作 源码下载 例如1.48.0http://www.boost.org/users/history/version_1_48_0.html 使用不同的版本时将version_1_48_0替换即可 编译 编译 b2.exe 进入boost…

软件工程——理论、方法与实践 第一章

第一章 主要分为1、软件2、软件工程3、软件工程知识体系4、软件工程职业道德规范四部分。软件是人类思维创造的杰作,并成为人类现代生活的催化剂;第一部分软件对软件的特性、发展和软件的危机进行了讲解&#xff0c;主要描述软件是计算机程序、规程以及运行计算机系统可能需要…

高德地图定位精度多少米_中美俄卫星定位精度分别是多少?美0.1米,俄10米,中国呢?...

在古代&#xff0c;悬于天际的北斗七星就被那时候的人们当做辨别方向的工具&#xff0c;在现代&#xff0c;太空之中的北斗卫星也在为人们指引方向&#xff0c;为了这一天的到来&#xff0c;我们等待了太久太久。1993年发生的银河号事件里&#xff0c;美国宣称我国商船携带了违…

find_path、find_library备忘录

find_path用于查找包含的头文件&#xff0c;其查找顺序为&#xff1a;从CMAKE_INCLUDE_PATH中查找。从系统默认头目录即/usr/include、/usr/local/inlucde中查找。其中如果从CMAKE_INCLUDE_PATH中查找的话&#xff0c;需要在~/.profile或者/etc/profile中设置&#xff08;注意&…

Android成长日记-Android布局优化

Android常用布局 1. LinearLayout(线性布局) 2. RelativeLayout(相对布局) 3. TableLayout(表格布局) 4. AbsoluteLayou(绝对布局) 5. FrameLayout(帧布局) 低--------------使用量------------------高 4->3->5->1->2 Android布局原则 (1) 尽量多使用LinearLayout…