Mysql学习总结(29)——MySQL中CHAR和VARCHAR
MySQL数据库的字符(串)类不要以为字符类型就是CHAR,CHAR和VARCHAR的区别在于CHAR是固定长度,只要你定义一个字段是CHAR(10),那么不论你存储的数据是否达到了10个字节,它都要占去10个字节的空间;而VARCHAR则是可变长度的,如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为VARCHAR(10)是最合算的,VARCHAR类型的占用空间是它的值的实际长度+1。
为什么要+1呢?这一个字节用于保存实际使用了多大的长度。从这个+1中也应该看到,如果一个字段,它的可能值最长是10个字符,而多数情况下也就是用到了10个字符时,用VARCHAR就不合算了:因为在多数情况下,实际占用空间是11个字节,比用CHAR(10)还多占用一个字节。
举个例子,就是一个存储股票名称和代码的表,股票名称绝大部分是四个字的,即8个字节;股票代码,上海的是六位数字,深圳的是四位数字。这些都是固定长度的,股票名称当然要用CHAR(8);股票代码虽然是不固定长度,但如果使用VARCHAR(6),一个深圳的股票代码实际占用空间是5个字节,而一个上海的股票代码要占用7个字节!考虑到上海的股票数目比深圳的多,那么用VARCHAR(6)就不如CHAR(6)合算了。
虽然一个CHAR或VARCHAR的最大长度可以到255,我认为大于20的CHAR是几乎用不到的――很少有大于20个字节长度的固定长度的东东吧?不是固定长度的就用VARCHAR。大于100的VARCHAR也是几乎用不到的――比这更大的用TEXT就好了。
TINYTEXT,最大长度为255,占用空间也是实际长度+1;TEXT,最大长度65535,占用空间是实际长度+2;MEDIUMTEXT,最大长度16777215,占用空间是实际长度+3;LONGTEXT,最大长度4294967295,占用空间是实际长度+4。为什么+1、+2、+3、+4?你要是还不知道就该打PP了。这些可以用在论坛啊、新闻啊,什么的,用来保存文章的正文。根据实际情况的不同,选择从小到大的不同类型。
例子:
创建表:
mysql> createtabletab1(colchar(10));
QueryOK, 0 rowsaffected (0.21 sec)
mysql> insertintotab1values('string1'),(' string2'),('string3 ');
QueryOK, 3 rowsaffected (0.04 sec)
Records: 3 Duplicates: 0 Warnings: 0
char末尾空格已经被删除
mysql> selectconcat("'",col,"'") fromtab1;
+---------------------+
| concat("'",col,"'") |
+---------------------+
| 'string1' |
| ' string2' |
| 'string3' |
+---------------------+
3 rowsin set (0.84 sec)
varchar就不会删除空格:
mysql> createtabletab2(colvarchar(10));
QueryOK, 0 rowsaffected (0.38 sec)
mysql> insertintotab2values('string1'),(' string2'),('string3 ');
QueryOK, 3 rowsaffected (0.04 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> selectconcat("'",col,"'") fromtab2;
+---------------------+
| concat("'",col,"'") |
+---------------------+
| 'string1' |
| ' string2' |
| 'string3 ' |
+---------------------+
3 rowsin set (0.09 sec)
MySQL中CHAR和VARCHAR
Mysql学习总结(29)——MySQL中CHAR和VARCHAR的更多相关文章
- mysql中char与varchar的区别分析(补充一句,int和integer没区别)
转自:http://www.jb51.net/article/23575.htm 在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定 ...
- MySQL中char、varchar和text的区别
三者空间占用方面: char:存储定长数据很方便,CHAR字段上的索引效率极高,可以有默认值,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间(自动用空格填 ...
- MySQL中char和varchar有啥区别?优缺点是啥?
在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定的长度,而varchar属于可变长的字符类型. char与varchar的区别 c ...
- MySQL中char与varchar区别,varchar最大长度是多少?
一.首先来说下字符与字节的区别: 字符与字节它们完全不是一个位面的概念,所以两者之间没有"区别"这一说法.在不同编码里,字符和字节的对应关系是不同的.一般来说,半角英文状态下一个字 ...
- 浅谈SQL Server、MySQL中char,varchar,nchar,nvarchar区别
最近一次的面试中,被面试官问到varchar和nvarchar的区别,脑海里记得是定长和可变长度的区别,但却没能说出来.后来,在网上找了下网友总结的区别.在这里做个备忘录: 一,SQL Server中 ...
- 万答#11,MySQL中char与varchar有什么区别
万答#11,MySQL中char与varchar有什么区别 1.实验场景 GreatSQL 8.0.25 InnoDB 2.实验测试 2.1 区别 参数 char varchar 长度是否可变 定长 ...
- SQLServer中char、varchar、nchar、nvarchar的区别
http://www.cnblogs.com/14lcj/archive/2012/07/08/2581234.html SQLServer中char.varchar.nchar.nvarchar的区 ...
- mysql中char,varchar与text类型的区别和选用
关于char,varchar与text平时没有太在意,一般来说,可能现在大家都是用varchar.但是当要存储的内容比较大时,究竟是选择varchar还是text呢?不知道...... 于是去查阅了一 ...
- mysql中char,varchar与text类型的区别
关于char,varchar与text平时没有太在意,一般来说,可能现在大家都是用varchar.但是当要存储的内容比较大时,究竟是选择varchar还是text呢?不知道...... text ...
随机推荐
- CSS Grid(CSS网格)
Grid被设计来做一些Flexbox不能做的事情,所以不是被设计来取代Flexbox的. flexbox 一维的 Grid 二维的 总结: Grid Items作用在Grid Container的直 ...
- [USACO18JAN] MooTube (离线并查集)
题目大意:给你一棵边权树,定义两点间距离为它们唯一路径上的最小路权,求与某点距离不大于K(k为已知)的点的数量 带权并查集维护集合内元素总数 路和问题 都按权值大到小排序,枚举问题, 建权值不小于K的 ...
- [读书笔记] Python数据分析 (二) 引言
1. 数据分析的任务:数据读写,数据准备(清洗,修整,规范化,重塑,切片切块,变形),转换,建模计算,呈现(模型/数据) 2. 数据集: bit.ly的1.usa.gov数据:URL缩短服务bit ...
- 在centos系统中增、删交换分区
Swap介绍: Linux 将物理内存分为内存段,叫做页面.交换是指内存页面被复制到预先设定好的硬盘空间(叫做交换空间)的过程,目的是释放对于页面的内存.物理内存和交换空间的总大小是可用的虚拟内存的总 ...
- 监控Apache计数器
- 在Action中获取servlet API
Struts2的Action组件是不依赖servlet API 的.那么当你在action中的业务需要处理HttpServletRequest和HttpServletResponse的时候(比如要对响 ...
- 日志工具全面理解及配置应用---以Log4j例子
一.日志系统基本常识 1.日志系统作用:将日志信息输出到控制台和文本文件,以追踪代码运行信息. 2.日志系统操作的是什么?日志系统打印信息,也是调用日志系统的log.Info(),log.Warn() ...
- eclipse project文件夹下 删除不掉文件夹或者文件的解决的方法
对于新手来说,有时操作失误就会导致eclipse文件夹中的某些子文件夹或者文件无法删除. 这种原因是,在project文件夹中(不是eclipse上显示的.是真实的物理磁盘上的)这个文件夹或者文件已经 ...
- LIVE555研究之五:RTPServer(二)
port是一样的. DynamicRTSPServer 继承关系: Medium是非常多类的基类.内部定义了指向环境类的引用和一个char类型媒体名称.并定义了依照媒体名称,查找相应媒体的成员函数lo ...
- Android用canvas画哆啦A梦
先上图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/diss ...