My SQL数据库管理与应用第5章 MySQL的数据类型
- 格式:pdf
- 大小:21.67 KB
- 文档页数:10
MySQL(⼆)数据库数据类型详解 序⾔ 今天去健⾝了,感觉把⾝体练好还是不错的,闲话不多说,把这个数据库所遇到的数据类型今天统统在这⾥讲清楚了,以后在看到什么数据类型,咱度应该认识,下⾯就跟着我的节奏去把这个拿下吧。
---WZY⼀、数据类型 MySQL的数据类型有⼤概可以分为5种,分别是整数类型、浮点数类型和定点数类型、⽇期和时间类型、字符串类型、⼆进制类型。
现在可以来看看你对这5种类型的熟悉程度,哪个看起来懵逼了,那就说明⾃⼰哪个不熟悉,不理解。
注意:整数类型和浮点数类型可以统称为数值数据类型,这不难理解。
数值数据类型 整数类型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT 浮点数类型:FLOAT、DOUBLE 定点⼩数:DECIMAL ⽇期/时间类型 YEAR、TIME、DATE、DATETIME、TIMESTAMP 字符串类型 CHAR、VARCHAR、TEXT、ENUM、SET等 ⼆进制类型 BIT、BINARY、VARBINARY、BLOB 1、整数类型 不管你学什么语⾔,在基础⽅⾯,都应该知道 1个字节= 8位⼆进制数。
每个类型的取值范围也就能够知道,⽐如TINYINT占⽤1个字节,也就是8位,2的8次⽅减1等于255,也就是说如果代表没符号的整数,该取值范围为0~255,如果是有符号的,最⾼位为符号号位,也就是2的7次⽅减1,也就是127,取值范围为-128~127,为什么需要减1,这个问题就需要考虑临界值的问题了。
⽽考虑临界值问题⼜有需要讨论原码补码反码的知识,这些度不是我们讨论的重点,所以在这就⾃⾏百度。
给出⼀张范围表,给⼤家做参考。
不同整数类型的取值范围 根据⾃⼰所需去选取不同的类型名称, 例如: CREATE TABLE aaa( id INT(10) PRIMARY KEY, age INT(6) ); 这个例⼦中INT(10)、INT(6) 括号中的数字表⽰的是该数据类型指定的显⽰宽度,指定能够显⽰的数值中数字的个数。
MySql数据库的列类型(字段类型)MySQL数据库的表是一个二维表,由一个或多个数据列构成。
每个数据列都有它的特定类型,该类型决定了MySQL如何看待该列数据,我们可以把整型数值存放到字符类型的列中,MySQL则会把它看成字符串来处理。
MySQL中的列类型有三种:数值类、字符串类和日期/时间类。
从大类来看列类型和数值类型一样,都是只有三种。
但每种列类型都还可细分。
下面对各种列类型进行详细介绍。
数值类的数据列类型数值型的列类型包括整型和浮点型两大类。
TINYINT:1字节非常小的正整数,带符号:-128~127,不带符号:0~255SMALLINT:2字节小整数,带符号:-32768~32767,不带符号:0~65535MEDIUMINT:3字节中等大小的整数,带符号:-8388608~8388607,不带符号:0~16777215INT:4字节标准整数,带符号:-2147483648~2147483647,不带符号:0~4294967295BIGINT:8字节大整数,带符号:-9223372036854775808~9233372036854775807,不带符号:0~18446744073709551615FLOAT:4字节单精度浮点数,最小非零值:+-1.175494351E-38,最大非零值:+-3.402823466E+38 DOUBLE:8字节双精度浮点数,最小非零值:+-2.2250738585072014E-308,最大非零值:+-1.7976931348623157E+308DECIMAL:M+2字节以字符串形式表示的浮点数,它的取值范围可变,由M和D的值决定。
整型数据列类型MySQL有五种整型数据列类型,即TINYINT,SMALLINT,MEDIUMINT,INT和BIGINT。
它们之间的区别是取值范围不同,存储空间也各不相同。
在整型数据列后加上UNSIGNED属性可以禁止负数,取值从0开始。
MySQL数据类型-decimal详解1.⾸先,对于精度⽐较⾼的东西,⽐如money,我会⽤decimal类型,不会考虑float,double,因为他们容易产⽣误差,numeric和decimal同义,numeric将⾃动转成decimal。
DECIMAL从MySQL 5.1引⼊,列的声明语法是DECIMAL(M,D)。
在MySQL 5.1中,参量的取值范围如下:·M是数字的最⼤数(精度)。
其范围为1~65(在较旧的MySQL版本中,允许的范围是1~254),M 的默认值是10。
·D是⼩数点右侧数字的数⽬(标度)。
其范围是0~30,但不得超过M。
说明:float占4个字节,double占8个字节,decimail(M,D)占M+2个字节。
如DECIMAL(5,2) 的最⼤值为9 9 9 9 . 9 9,因为有7 个字节可⽤。
M 与D 对DECIMAL(M, D) 取值范围的影响类型说明取值范围(MySQL < 3.23)取值范围(MySQL >= 3.23)MySQL < 3.23 MySQL >=3.23DECIMAL(4, 1) -9.9 到 99.9 -999.9 到 9999.9DECIMAL(5,1) -99.9 到 999.9 -9999.9 到 99999.9DECIMAL(6,1) -999.9 到 9999.9 -99999.9 到 999999.9DECIMAL(6,2) -99.99 到 999.99 -9999.99 到 99999.99DECIMAL(6,3) -9.999 到 99.999 -999.999 到 9999.999# 在MySQL 3.23 及以后的版本中,DECIMAL(M, D) 的取值范围等于早期版本中的DECIMAL(M + 2, D) 的取值范围。
结论:当数值在其取值范围之内,⼩数位多了,则直接截断⼩数位。
mysql数据库的number类型全文共四篇示例,供读者参考第一篇示例:MySQL数据库的Number类型是一种非常常用的数据类型,它用来存储数值型数据,包括整数和小数。
在实际的数据库设计和开发中,我们经常会用到Number类型来存储各种数字数据,比如订单金额、产品价格、数量等等。
在本文中,我们将详细介绍MySQL数据库中的Number类型,包括其各种子类型和用法。
MySQL数据库中的Number类型主要包括两种子类型,即整数型和浮点型。
整数型包括TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT,分别用来存储不同范围的整数数据。
浮点型包括FLOAT和DOUBLE,用来存储小数数据。
下面我们将分别介绍这些Number类型的特点和用法。
1. TINYINTTINYINT类型用来存储小范围的整数数据,取值范围为-128到127。
TINYINT类型占用1个字节的存储空间,适用于存储性别、状态等只有两个取值的数据。
6. FLOATFLOAT类型用来存储单精度浮点数,即小数数据。
FLOAT类型占用4个字节的存储空间,可以存储6-7位的有效数字,适用于存储科学计算、工程测量等领域的数据。
第二篇示例:MySQL数据库中的number类型主要用于存储数值型数据,包括整型和浮点型两种。
整型数据包括TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT,而浮点型数据包括FLOAT和DOUBLE。
在数据库表的设计中,合理地选择number类型可以提高数据库的性能和数据存储效率。
让我们来了解一下MySQL数据库中number类型的具体描述和用法。
1. TINYINT:TINYINT类型用于存储非常小的整数数据,范围在-128到127之间。
它占用1个字节的存储空间,适用于存储布尔类型数据或者只需要记录小整数的场景。
6. FLOAT:FLOAT类型用于存储单精度浮点数数据,范围在-3.402823466E+38到-1.175494351E-38、0和1.175494351E-38到3.402823466E+38之间。
本文由lchengm贡献 doc1。
MySQL 字段类型详解 MySQL 提 供 了 整 数 和 浮 点 数 的 数 值 类 型 。
可 根 据 所 要 表 示 的 值 的 范 围 选 择 相 应 的 类 型 。
对 于 整 数 类 型 , 如 果 指 定 了 AUTO_INCREMENT 属 性 , 则 列 必 须 为 PRIMARY KEY 或 UNIQUE 索 引 。
将 NULL 插 入 AUTO_INCREMENT 列 将 会 插 入 一 个 大 于 该 列 中 当 前 最 大 值 的 值 。
如 果 指 定 了 UNSIGNED 属 性 , 则 相 应 的 整 数 类 型 不 允 许 取 负 值 。
如 果 指 定 了 ZEROFILL 属 性 , 则 用 前 导 零 填 充 数 值 类 型 值 以 达 到 列 的 显 示 宽 度 。
1. TINYINT[(M)] 说明:非常小的整数 允 许 的 属 性 : AUTO _ I N C R E M E N T, UNSIGNED, ZEROFILL 取 值 范 围 : - 128 到 127( - 27 到 27- 1) 或 者 如 果 为 U N S I G N E D, 则 0 到 2 5 5 , ( 0 到 2 8-1) 缺 省 值 : 如 果 列 可 为 NULL; 则 为 NULL; 如 果 列 为 NOT NULL, 则 为 0 存储需求:1 字节 2. SMALLINT[(M)] 说明:小整数 允 许 的 属 性 : AUTO _ I N C R E M E N T, UNSIGNED, ZEROFILL 取 值 范 围 : - 32768 到 3 27 6 7( - 215 到 215- 1) 或 者 如 果 为 U N S I G N E D, 则 , 0 到 6 5 5 3 5( 0 到 216- 1) 缺 省 值 : 如 果 列 可 为 NULL; 则 为 NULL; 如 果 列 为 NOT NULL, 则 为 0 存储需求:2 字节 3. MEDIUMINT[(M)] 说明:中等大小的整数 允 许 的 属 性 : AUTO _ I N C R E M E N T, UNSIGNED, ZEROFILL 取 值 范 围 : -8388608 到 8 3 8 8 6 07( - 22 3 到 22 3- 1) 或 者 如 果 为 U N S I G N E , D, 则 0 到 16 7 7 2 15( 0 到 22 4- 1) 缺 省 值 : 如 果 列 可 为 NULL, 则 为 NULL; 如 果 列 为 NOT NULL, 则 为 0 存储需求:4 字节 4. INT[(M)] 说明:标准大小的整数 允 许 的 属 性 : AUTO _ I N C R E M E N T, UNSIGNED, ZEROFILL 取 值 范 围 : - 2147483648 到 2 14 7 4 8 3 6 4 7( - 231 到 2 3 1- 1) 或 者 如 果 为 U N , S I G N E D, 则 0 到 4 2 9 4 9 6 7 2 9 5( 0 到 2 3 2- 1) 缺 省 值 : 如 果 列 为 NULL, 则 为 NULL; 如 果 列 为 NOT FULL, 则 为 0 存储需求:4 字节 同 义 词 : I N T E G E R [(M)] 5. BIGINT[(M)] 说明:大整数 允 许 的 属 性 : AUTO _ I N C R E M E N T, UNSIGNED, ZEROFILL 取 值 范 围 : - 9223372036854775808 到 9 2 2 3 3 7 2 0 3 6 8 5 4 7 7 5 8 07( - 263 到 2 6 3- 1) 或 者 如 果 为 U N S I G N E D, 则 0 到 18 4 4 6 7 4 4 07 3 7 0 9 5 5 16 , 15( 0 到 26 4 -1) 缺 省 值 : 如 果 列 可 为 NULL, 则 为 NULL; 如 果 列 为 NOT NULL, 则 为 0 存储需求:8 字节 6. FLOAT [(M, D)] 说 明 : 小 浮 点 数 ; 单 精 度 ( 精 度 小 于 D O U B L E) 允许的属性:Z E R O F I L L 取 值 范 围 : 最 小 非 零 值 为 ±1.75494351E -38; 最 大 非 零 值 为 ±3 . 4 0 2 8 2 3 4 6 6 E + 3 8 缺 省 值 : 如 果 列 可 为 NULL, 则 为 NULL; 如 果 列 为 NOT NULL, 则 为 0 存储需求:4 字节 同 义 词 : MySQL3.23 版 以 前 , FLOAT(4) 为 具 有 缺 省 M 和 D 值 的 FLOAT 的 同 义 词 。
第1章数据库概述1.填空题(1)Oracle(2)U 1U 2U 4U(3)体积小、安装成本低、速度快、源码开放(4)Memcached、Redis、mongoDB(5)大、中、小型网站中2.选择题(1)A(2)B(3)A(4)A(5)D3.简答题(1)常见的关系型数据库有MySQL、Oracle、SQL Server和Access数据库。
MySQL数据库主要应用在广泛地应用到互联网上的大、中、小型网站中;Oracle数据库主要应用在传统大企业、政府机构、金融机构、证券机构等;SQL Server数据库主要应用在部分电商和使用Windows 服务器平台的企业;Access数据库早期应用于小型程序系统ASP + Access、系统留言板、校友录等。
(2)关系型数据库按照结构化的方法存储数据,具备纵向扩展能力,采用结构化查询语言,强调ACID规则,强调数据的强一致性,可以控制事务原子性细粒度,并且一旦操作有误或者有需要,可以回滚事务。
非关系型数据库不需要固定的表结构,一般情况下也不存在对数据的连续操作。
不同点:关系型数据库使用表结构,非关系型的数据库格式灵活。
关系型数据库支持SQL语言,支持事务,非关系型数据库不提供SQL语言,无事务处理。
相对于关系型数据库,非关系型数据库在大数据存取上具备无法比拟的性能优势。
(3)应该注意MySQL的版本和开发人员使用的版本。
第2章环境的安装与基本配置1.填空题(1)Ubuntu CentOS Red Hat(2)RPM包二进制包源码包(3)仅主机模式NAT模式桥接模式(4)数据库语言(5)Mysqladmin、mysqldump等命令2.选择题(1)A(2)B(3)B(4)D(5)D3.简答题(1)在企业中应该使用源码编译方式安装MySQL,使用源码安装在编译安装过程可以设定参数,按照需求,进行安装,并且安装的版本,可以自己选择,灵活性比较大。
(2)VMware虚拟平台提供3种网络模式。
MySQL中常见的数据类型及其用途MySQL是一种常用的关系型数据库管理系统,被广泛应用于Web开发和其他领域。
在MySQL中,数据类型是数据表中各列的属性之一,它定义了数据的存储格式、占用空间和操作行为。
不同的数据类型适用于不同的数据存储需求和数据操作操作。
本文将介绍MySQL中常见的数据类型及其用途。
1. 整型数据类型整型数据类型用于存储整数值,常见的有以下几种:- TINYINT:存储范围为-128到127的整数。
通常用于存储布尔值,0表示假,1表示真。
- SMALLINT:存储范围为-32768到32767的整数。
适用于存储较小的整数值。
- MEDIUMINT:存储范围为-8388608到8388607的整数。
适用于存储中等大小的整数值。
- INT:存储范围为-2147483648到2147483647的整数。
适用于存储一般大小的整数值。
- BIGINT:存储范围为-9223372036854775808到9223372036854775807的整数。
适用于存储较大的整数值。
整型数据类型用于存储整数,经常用于记录索引、主键或表示计数值。
2. 浮点型数据类型浮点型数据类型用于存储浮点数值,即带有小数点的数值。
常见的有以下几种:- FLOAT:单精度浮点数,占用4字节。
通常用于存储较小范围的浮点数。
- DOUBLE:双精度浮点数,占用8字节。
适用于存储较大范围的浮点数。
浮点型数据类型用于存储需要保留小数位的数值,如货币金额、科学计数法表示的数值等。
3. 定点型数据类型定点型数据类型用于存储固定精度的数值,适用于需要精确计算的场景。
常见的有以下几种:- DECIMAL:用于存储固定精度的十进制数值。
可以指定精度和小数位数。
定点型数据类型适用于要求高精度计算的场景,如财务计算、精确测量等。
4. 字符串型数据类型字符串型数据类型用于存储文本数据,常见的有以下几种:- CHAR:固定长度字符串,最多可以存储255个字符。
MySQL中的数据类型选择与性能影响分析引言在数据库设计与建模的过程中,选择合适的数据类型对于存储和检索数据是至关重要的。
不同的数据类型会对数据库的性能产生不同的影响。
因此,在MySQL数据库中合理选择与使用数据类型对于提高数据库的性能和效率至关重要。
本文将从不同数据类型的特性入手,分析其对数据库性能的影响,并提供一些优化建议。
1. 数值类型选择数值类型在数据库中广泛应用于存储整数、小数和货币等。
MySQL提供不同的数值类型供选择,包括整型、浮点型和定点型。
不同的数值类型在存储空间和计算速度上存在差异。
1.1 整数类型MySQL提供了多种整数类型,如TINYINT、SMALLINT、INT和BIGINT等。
根据实际需求选择合适的整数类型可以节省存储空间并提高计算性能。
通常情况下,尽量选择最小的整数类型来存储数据,以节省存储空间。
例如,如果需要存储的数字范围在-128到127之间,可以选择TINYINT类型,而不是INT类型。
1.2 浮点类型浮点类型适用于存储具有小数部分的数字,如FLOAT和DOUBLE。
浮点类型相对于整数类型在存储空间上更为占用,并且在计算时也相对较慢。
因此,在选择浮点类型时,应根据具体需求权衡存储空间和计算速度的关系。
1.3 定点类型定点类型用于精确存储小数,如DECIMAL。
与浮点类型相比,定点类型具有更高的精度,但相应地也占用更多的存储空间。
在需要精确计算的场景中,如财务系统,建议使用定点类型。
2. 字符串类型选择字符串类型用于存储文本、字符和日期时间等数据。
MySQL提供多种字符串类型,如CHAR、VARCHAR、TEXT等。
不同的字符串类型在存储空间和检索速度上具有不同的特性。
2.1 CHAR类型CHAR类型用于存储固定长度的字符数据。
CHAR类型在存储时会按照指定长度进行填充,所以它在存储空间方面相对较大。
然而,由于存储的是固定长度的数据,检索速度相对较快。
在存储长度固定的数据时,如性别、国家代码等,可以选择CHAR类型。
mysql基本数据类型MySQL是一种关系型数据库管理系统,它支持多种数据类型。
MySQL的数据类型分为数值类型、日期和时间类型、字符串类型、二进制类型。
以下是MySQL基本数据类型(注意:各类型数据的存储要占用的字节数,不同的数据库系统、不同的编译选项这些大小限制和取值范围有所不同):1. 数值类型MySQL数值类型有整数类型和小数类型两种:1.1 整数类型- TINYINT:有符号范围为-128~127,无符号范围0~255。
占用1个字节。
- SMALLINT:有符号范围为-32768~32767,无符号范围0~65535。
占用2个字节。
- MEDIUMINT:有符号范围为-8388608~8388607,无符号范围0~16777215。
占用3个字节。
- INT:有符号范围为-2147483648~2147483647,无符号范围0~4294967295。
占用4个字节。
- BIGINT:有符号范围为-9223372036854775808~9223372036854775807,无符号范围0~18446744073709551615。
占用8个字节。
1.2 小数类型- FLOAT:单精度浮点数,占用4个字节。
- DOUBLE:双精度浮点数,占用8个字节。
- DECIMAL:高精度浮点数,依赖于实际存储的数字大小而变化。
2. 日期和时间类型MySQL日期和时间类型包括DATE、TIME、DATETIME、YEAR和TIMESTAMP:- DATE:日期,存储的范围为'1000-01-01'到'9999-12-31'。
占用3个字节。
- TIME:时间,存储的范围为 '-838:59:59'到 '838:59:59'。
占用3个字节。
- DATETIME:日期时间,存储范围为 '1000-01-01 00:00:00'到 '9999-12-31 23:59:59'。
MySQL的数据类型⽬录MySQL的数据类型数据库中的每个列都应该有适当的数据类型,⽤于限制或允许该列中存储的数据。
例如,列中存储的为数字,则相应的数据类型应该为数值类型。
如果使⽤错误的数据类型可能会严重影响应⽤程序的功能和性能,所以在设计表时,应该特别重视数据列所⽤的数据类型。
更改包含数据的列不是⼀件⼩事,这样做可能会导致数据丢失。
因此,在创建表时必须为每个列设置正确的数据类型和长度。
MySQL中定义数据字段的类型对你数据库的优化是⾮常重要的。
MySQL⽀持所有标准SQL数值数据类型。
MySQL⽀持多种类型,⼤致可以分为三类:数值⽇期/时间字符(串)类型。
数据类型分类1. 数值类型(整数类型和⼩数类型)整数类型:包括 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT。
⼩数类型:浮点数类型包括 FLOAT 和 DOUBLE。
定点数类型为 DECIMAL。
2. ⽇期/时间类型包括 YEAR、TIME、DATE、DATETIME 和 TIMESTAMP。
3. 字符类型(⽂本字符串和⼆进制字符串)字符串类型:包括 CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 和 SET 等。
⼆进制类型:包括 BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。
数值类型MySQL⽀持所有标准SQL数值数据类型。
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLEPRECISION)。
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且⽀持MyISAM、MEMORY、InnoDB和BDB表。
作为SQL标准的扩展,MySQL也⽀持整数类型TINYINT、MEDIUMINT和BIGINT。
本文由一直飞de风筝贡献 ppt1。
第五章 MySQL的数据类型 的数据类型 自强不息 厚德载物 课程目标 数字类型 字符串类型 日期时间类型 选择正确的数据类型 MySQL的数据类型 的数据类型 MySQL 的数据类型是一种手段,通过这 的数据类型是一种手段, 种手段可以描述一个表列包含什么类型 的值, 的值,这又决定了 MySQL 怎样处理这 些值. 些值. 例如,数值值既可用数值也可用串的数 例如, 据类型来存放, 据类型来存放,但是根据存放这些值的 类型, 类型, MySQL 对它们的处理将会有些 不同. 不同. MySQL的数据类型 的数据类型 每种列类型都有几个特性如下: 每种列类型都有几个特性如下: 其中可以存放什么类型的值. 其中可以存放什么类型的值. 值要占据多少空间,以及该值是否是定长的 值要占据多少空间, 所有值占相同数量的空间)或可变长的( (所有值占相同数量的空间)或可变长的(所 占空间量依赖于所存储的值). 占空间量依赖于所存储的值). 该类型的值怎样比较和存储. 该类型的值怎样比较和存储. 此类型是否允许 NULL 值. 此类型是否可以索引. 此类型是否可以索引. MySQL的数据类型 的数据类型 字符"1"编码 共计 占用 5个 字节 存储 空间 字符"2"编码 字符"3"编码 4" 字符"4"编码 字符"5"编码 00110001 00110010 00110011 00110100 00110101 共计 占用 2个 字节 存储 空间 00110000 数字12345 的二进制 编码 00111001 1.字符串"12345"保存方法 2.数字12345保存方法 不同数据类型的保存方法 MySQL的数据类型 的数据类型 数据保存的格式不同,读取这些数据时进行的操 数据保存的格式不同, 作当然也就不同, 作当然也就不同,因此数据库在存储数据之前 都必须要明确数据的格式,也就是数据的数据 都必须要明确数据的格式,也就是数据的数据 类型. 类型. 如果不知道某一个数据存储时所使用的数据类型, 如果不知道某一个数据存储时所使用的数据类型, 就无法正确的读出该数据来, 就无法正确的读出该数据来,因为使用不同的 数据格式去读去同一个数据时, 数据格式去读去同一个数据时,得到的结果也 是截然不同的. 是截然不同的. 1.数字 数字 数字类型用于存储数字,可分为整数类型和浮 数字类型用于存储数字, 点数(小数)类型. 点数(小数)类型.如果仅从数学的角度上分 整数和小数都可以统一为小数, 析,整数和小数都可以统一为小数,整数只是 小数位为零的小数, 但在MySQL中这两数据 小数位为零的小数 , 但在 中这两数据 类型的保存方式却有很大的不同. 类型的保存方式却有很大的不同. 一般而言,能使用整数保存的数据,就尽量选 一般而言,能使用整数保存的数据, 择使用整数类型.比如,要保存商品的价格时, 择使用整数类型.比如,要保存商品的价格时, 可能会因为一个笔记本的价格是3.20元而为这 可能会因为一个笔记本的价格是 元而为这 个数据选择浮点数类型, 个数据选择浮点数类型,但更好的选择却是将 3.20元变换成 元变换成320分后以整数方式保存. 分后以整数方式保存. 元变换成 分后以整数方式保存 1.数字 数字 MySQL 支持科学表示法,由整数或浮点 支持科学表示法, 数后跟" 或 数后跟" e"或"E",一个符号("+"或 ,一个符号( 或 " -" ) 和 一 个 整 数 指 数 来 表 示 . 1.34E+12 和 43.27e-1 都是合法的科学表 示法表示的数. 不是合法的, 示法表示的数.而1.34E12 不是合法的, 因为指数前的符号未给出.指数前的" 因为指数前的符号未给出.指数前的" e" 也是一个合法的十六进制数字, 也是一个合法的十六进制数字 , 因此有 可能会弄错. 数值前可放一个负号" 可能会弄错 . 数值前可放一个负号 " -" 以表示负值. 以表示负值. 1.数字 数字 数 字 类 型 可 以 结 合 UNSIGNED 及 ZEROFILL符号使用 , UNSIGNED表示 符号使用, 符号使用 表示 无符号数字, 表示使用" 无符号数字 , ZEROFILL表示使用 " 0" 表示使用 作为填充符进行填充. 作为填充符进行填充. 1.1 整数 整数在 整数在MySQL中保存时,MySQL会将其转换 中保存时, 中保存时 会将其转换 成二进制编码的形式直接保存. 成二进制编码的形式直接保存. 整数可以直接以十六进制表示,方法为在整数 整数可以直接以十六进制表示, 对应的十六进制编码( 对应的十六进制编码("0"到"9"及"a"到 到 及 到 "f")前加上"0x".例如,0x0a为十进制的 )前加上" .例如, 为十进制的 10,而0xffff为十进制的 为十进制的65535.十六进制数字 , 为十进制的 . 不区分大小写,但其前缀" 不能为" 不区分大小写,但其前缀"0x"不能为"0X". 不能为 . 都是合法的, 即0x0a和0x0A都是合法的,但0X0a和0X0A不 和 都是合法的 和 不 是合法的. 是合法的. 1.1 整数 取值范围 类型名 字节数 无符号(unsigned) 无符号(unsigned) TINYINT 1 2 3 4 8 0 ┈ 28-1 0 ┈ 216-1 0 ┈ 224-1 0 ┈ 232-1 0 ┈ 264-1 有符号(signed) 有符号(signed) -27 ┈ 27-1 -215 ┈ 215-1 -223 ┈ 223-1 -231 ┈ 231-1 -263 ┈ 263-1 SMALLINT MEDIUMINT INT BIGINT 1.1 整数 在指定整数类型时 , 可以采用 " 类型名 显示 在指定整数类型时, 可以采用" 类型名[显示 长度]"的写法 的写法, 长度 的写法,如int[3],其中"显示长度"用 ,其中"显示长度" 于指定数字在显示时的长度, 显示长度" 于指定数字在显示时的长度,"显示长度"对 数据的大小范围没有影响. 数据的大小范围没有影响.当数字的实际长度 比显示长度要小时, 比显示长度要小时 , MySQL显示该数字时会 显示该数字时会 自动使用填充符补足指定的"显示长度";当 自动使用填充符补足指定的" 显示长度" 数字的实际长度比显示长度大时, 数字的实际长度比显示长度大时 , MySQL会 会 突破显示长度的限制而显示数字的实际值. 突破显示长度的限制而显示数字的实际值. 1.1 整数 默认情况下 默认情况下MySQL会用空格作为填充符 会用空格作为填充符 进行填充,但"显示长度"通常会与 ZEROFILL属性连用,表示 属性连用, 属性连用 表示MySQL使用 使用 作为填充符. "0"作为填充符. 作为填充符 我们应该尽量避免数字的实际长度超过 其显示长度, 其显示长度 , 出现这种情况时不仅仅是 使表中的记录看起来不协调, 使表中的记录看起来不协调 , 还会在进 行某些复杂的表联结操作时出错. 行某些复杂的表联结操作时出错. 1.2 浮点数 浮点数可以理解为我们通常所说的小数, 浮点数可以理解为我们通常所说的小数, MySQL提供三种浮点类型:FLOAT, 提供三种浮点类型: 提供三种浮点类型 , DOUBLE和DECIMAL. 和 . 浮点数类型的取值范围与整型不同,除 浮点数类型的取值范围与整型不同, 了有最大值和最小值外, 了有最大值和最小值外,浮点数类型还 有最小正数和最大负数, 有最小正数和最大负数,这两个值的绝 对值相等,用于衡量浮点数的精度, 对值相等,用于衡量浮点数的精度,这 对于记录科学数据来说是非常重要的. 对于记录科学数据来说是非常重要的. 1.2 浮点数 FLOAT型 型 FLOAT类型有两种使用方法: 类型有两种使用方法: 类型有两种使用方法 FLOAT(有效位数,小数位数 有效位数, 有效位数 小数位数) FLOAT(二进制位数 . 二进制位数). 二进制位数 1.2 浮点数 FLOAT(有效位数,小数位数 有效位数, 有效位数 小数位数) 此类型又称为单精度浮点数类型,占用4 此类型又称为单精度浮点数类型,占用 字节长度,取值范围是: 字节长度,取值范围是: -3.402823466E+38到3.402823466E+38,最 到 , 小正数是1.175494351E-38,最大负数是 小正数是 ,最大负数是1.175494351E-38. . 以上列出的只是理论值,不同计算机的 以上列出的只是理论值, 硬件可能会使这一范围有所不同. 硬件可能会使这一范围有所不同. 1.2 浮点数 其中,"有效位数"表示有效数字的最大位数; 其中, 有效位数"表示有效数字的最大位数; 小数位数"表示小数点后的最大位数. "小数位数"表示小数点后的最大位数.如果 有效位数" 小数位数"都省略, "有效位数"和"小数位数"都省略,其默认 值会因硬件不同而有所不同, 值会因硬件不同而有所不同,单精度浮点数可 精确到小数点后第7位 精确到小数点后第 位. FLOAT类型表示小数部分时,由于二进制的 类型表示小数部分时, 类型表示小数部分时 原因只能准确的表示1/2n(n不大于表示小数 原因只能准确的表示 ( 不大于表示小数 位的二进制位数),或它们的组合, ),或它们的组合 位的二进制位数),或它们的组合,因此在表 示小数时会有不精确的现象. 示小数时会有不精确的现象. 1.2 浮点数 FLOAT(二进制位数 二进制位数) 二进制位数 这是一个混合了FLOAT和DOUBLE两种 这是一个混合了 和 两种 类型的数据类型,其中"二进制位数" 类型的数据类型,其中"二进制位数" 代表表示该浮点数所占用的二进制位数, 代表表示该浮点数所占用的二进制位数, 这个参数唯一的作用就是使MySQL确定 这个参数唯一的作用就是使 确定 该使用FLOAT型还是 型还是DOUBLE型来作为 该使用 型还是 型来作为 实际的数据类型. 实际的数据类型. 1.2 浮点数 FLOAT(二进制位数 二进制位数) 二进制位数 当"二进制位数"在0到24(包括 )之 到 (包括24) 二进制位数" 间时,这一数据类型等同于未指定" 间时,这一数据类型等同于未指定"有 效位数" 小数位数" 效位数"和"小数位数"的FLOAT型. 型 二进制位数" 之间时, 当"二进制位数"在25到53之间时,这 到 之间时 一数据类型会被MySQL转换成未指定 一数据类型会被 转换成未指定 有效位数" 小数位数" "有效位数"和"小数位数"的 DOUBLE型.其取值范围也与相应的数 型 据类型一致. 据类型一致. 1.2 浮点数 DOUBLE (有效位数,小数位数 有效位数, 有效位数 小数位数) 此类型又称双精度浮点数类型,占用8字节长 此类型又称双精度浮点数类型,占用 字节长 取值范围是: 度,取值范围是: -1.7976931348623157E+308 到1.7976931348623157E+308,最大负数是: ,最大负数是: -2.2250738585072014E-308, 最小正数是: 最小正数是: 2.2250738585072014E-308. . 以上列出的也只是理论值,不同计算机的硬件 以上列出的也只是理论值, 可能会使这一范围有所不同. 可能会使这一范围有所不同. 1.2 浮点数 声 明 DOUBLE 类 型 时 可 使 用 有效位数, " DOUBLE(有效位数, 小数位数 的写 有效位数 小数位数)"的写 其中, 有效位数" 法 . 其中 , " 有效位数 " 表示有效数字 的最大位数; 小数位数" 的最大位数 ; " 小数位数 " 表示小数点 后的最大位数. 后的最大位数 . 双精度浮点数可精确到 小数点后第15位 小数点后第 位. 1.2 浮点数 DECIMAL(有效位数,小数位数 有效位数, 有效位数 小数位数) 此类型用于保存对精确度要求较高的数 以前, 值.在MySQL 5.1以前,DECIMAL类型 以前 类型 在保存小数时, 在保存小数时,使用的不是二进制保存 而是使用的类似字符串的保存方法, 法,而是使用的类似字符串的保存方法, 对每一位小数位单独保存; 对每一位小数位单独保存;在MySQL 5.1中,DECIMAL类型使用的是二进制 中 类型使用的是二进制 保存法. 保存法. 1.2 浮点数 声明时可使用"DECIMAL (有效位数,小数 声明时可使用" 有效位数, 有效位数 位数)"的写法 其中, 有效位数" 的写法. 位数 的写法.其中,"有效位数"表示有效 数字的最大位数; 小数位数" 数字的最大位数;"小数位数"表示小数点后 的最大位数. 的最大位数. 如果使用 如果使用DECIMAL(有效位数 的写法,而不 有效位数)的写法 有效位数 的写法, 指明"小数位数" 则相当于DECIMAL(有 指明"小数位数",则相当于 ( 效位数, )的写法,此时不保存小数部分. 效位数,0)的写法,此时不保存小数部分. 如果使用 如果使用DECIMAL的写法,既不指明"有效 的写法, 的写法 既不指明" 位数",也不指定"小数位数",则等同于 位数" 也不指定"小数位数" DECIMAL(10,0)的写法. ( , )的写法. 1.2 浮点数 DECIMAL类型的最大有效位数是 , 类型的最大有效位数是65, 类型的最大有效位数是 最大小数位数是30, 最大小数位数是 , 其实际的取值范围 由声明时指定的有效位数和小数位数而 的取值范围是定 , 如 DECIMAL(5,2)的取值范围是 的取值范围是 999.99至999.99.如果在插入数值时,小 至 .如果在插入数值时, 数位数超过了指定的"小数位数", MySQL会将该值的小数位数转换成指定 会将该值的小数位数转换成指定 的小数位数. 的小数位数. 1.3 位类型 位类型可会为 位类型可会为BIT型和 型和BOOL型. 型和型 BIT[位数 位数] 位数 此类型用于声明一个指定位数的数据,位数的 此类型用于声明一个指定位数的数据, 取值范围是1到 ,默认值是1. 取值范围是 到64,默认值是 .此类型所占用 的字节数由"位数"决定,每满8位即需一个 的字节数由"位数"决定,每满 位即需一个 新的字节,其长度的计算方法为"(位数 新的字节,其长度的计算方法为" 位数+7)/8", , 位数 如有小数则进一. 占用4个字节 如有小数则进一.如BIT[25]占用 个字节,而 占用 个字节, BIT[26]则占用 个字节. 则占用5个字节 则占用 个字节. 1.3 位类型 此数据类型用于存储基于位的数值,指 此数据类型用于存储基于位的数值, 定位类型的值时,可以采用b'二进制值 二进制值' 定位类型的值时,可以采用 二进制值' 的写法. 代表7, 的写法.如, b'111' 代表 ,b'10000000' 代表128. 代表 . 如果所插入的值的位数比指定的位数少 会在值的左边用0填充 时,MySQL会在值的左边用 填充,如 会在值的左边用 填充, 将值b' '插入到BIT[8]时,等同于 将值 '111'插入到 时 插入值b' 插入值 '00000111'. ' 1.3 位类型 bool型 型 bool型数据用于存储逻辑值,它只有两 型数据用于存储逻辑值, 型数据用于存储逻辑值 种状态, 种状态,即"TRUE"和"FALSE", " " 或"1"和"0".此类型等价于 " " TINYINT(1)类型.其值为 时表示 类型. 类型 其值为0时表示 值都表示" "FALSE",所有非 值都表示"TRUE". ,所有非0值都表示 . 2. 字符串 字符串类型包括以下类型: 字符串类型包括以下类型: CHAR VARCHAR BINARY VARBINARY BLOB TEXT ENUM SET 2. 字符串 字符 串中可使用几个转义序列, 它们用 字符串中可使用几个转义序列 , 串中可使用几个转义序列 来表示特殊的字符. 来表示特殊的字符 . 每个序列以一个反 斜杠( 斜杠 ( " \") 开始 , 指出临时不同于通 ) 开始, 常 的 字 符 解 释 . 注 意 NUL 字 节 与 NULL 值不同;NUL 为一个零值字节, 值不同; 为一个零值字节, 为没有值. 而 NULL 为没有值. 2. 字符串 转义字符 \0 \' \" \b \n \r \t \\ 含义 NUL (ASCII 0) 单引号 双引号 退格 新行 回车 制表符 反斜杠 2. 字符串 要在串中包括一个引号,可有如下三种选择: 如果串是用相同的引号括起来的,那么在串中需 要引号的地方双写引号即可. 如果串是用另外的引号括起来的,则不需要双写 相应引号. 用反斜杠方式表示,这种方法不去管用来将串括 起的是单引号还是双引号. 2.1 CHAR和VARCHAR 和 这两个类型都用于保存小型字符串,只 这两个类型都用于保存小型字符串, 保存它们的方法不同. 是MySQL保存它们的方法不同. 保存它们的方法不同 CHAR[字符串长度 字符串长度] 字符串长度 CHAR[字符串长度 用于声明一个定长类 字符串长度]用于声明一个定长类 字符串长度 型的列,其中"字符串长度" 型的列,其中"字符串长度"用于限制 可插入的字符串的最大长度, 可插入的字符串的最大长度,如 CHAR[100]最多只能保存 个字符. 最多只能保存100个字符 最多只能保存 个字符. "字符串长度"的设置范围为0到255. 字符串长度"的设置范围为 到 . 2.1 CHAR和VARCHAR 和 CHAR类型的列 , 无论插入的字符数量 类型的列, 类型的列 是多少,最终都会被MySQL处理成指定 是多少,最终都会被 处理成指定 字符串长度的列. 字符串长度的列 . 当插入的字符串长度 小于指定的字符串长度时, 小于指定的字符串长度时,MySQL会在 会在 字符串尾部以空格进行填充. 字符串尾部以空格进行填充. 2.1 CHAR和VARCHAR 和 VARCHAR[字符串长度 字符串长度] 字符串长度 VARCHAR[字符串长度 用于声明一个变 字符串长度]用于声明一个变 字符串长度 长类型的列,其中"字符串长度" 长类型的列,其中"字符串长度"也用 于限制插入字符串的最大长度, 于限制插入字符串的最大长度,"字符 串长度"的设置范围为0到 .(由 串长度"的设置范围为 到65535.(由 .( 于MySQL规定一条记录的所有列的长度 规定一条记录的所有列的长度 之和不能超过65535个字节,受此限制一 个字节, 之和不能超过 个字节 列的最大长度实际只能到65532字节.) 字节.) 列的最大长度实际只能到 字节 2.1 CHAR和VARCHAR 和 与CHAR类型不同的是,VARCHAR类型在保 类型不同的是, 类型不同的是 类型在保 存数据时使用的是"按需分配" 存数据时使用的是"按需分配"存储空间的策 略,它在保存数据的同时记录下该字符串的实 际长度, 际长度,因此所占用的存储空间大多数情况下 是小于指定的"字符串长度" 是小于指定的"字符串长度"的. 如果插入的字符串的长度超过了指定的字符串 长度, 会截断该字符串. 长度,MySQL会截断该字符串.当被截掉的 会截断该字符串 字符串不是空格时, 会进行警告提示. 字符串不是空格时,MySQL会进行警告提示. 会进行警告提示 如果MySQL工作在"strict"模式,将不允许 工作在" 如果 工作在 "模式, 截掉空格以外的字符,否则会产生运行错误, 截掉空格以外的字符,否则会产生运行错误, 而不仅仅是一个警告提示. 而不仅仅是一个警告提示. 2.1 CHAR和VARCHAR 和 使用 使用VARCHAR类型是要注意的一个问 类型是要注意的一个问 题是, 在保存字符串时, 题是 , VARCHAR在保存字符串时, 会 在保存字符串时 自动去除字符串结束处的空格, 自动去除字符串结束处的空格 , 如果要 进行字符串的比较, 进行字符串的比较,MySQL也会将仅有 也会将仅有 尾部空格不同的字符串认为是相同的字 符串. 这一点与标准SQL的处理方法不 符串 . 这一点与标准 的处理方法不 同. 2.2 BINARY和VARBINARY 和 BINARY和VARBINARY与CHAR和 和 与 和 VARCHAR类型很相似,它们主要用存储二进 类型很相似, 类型很相似 制数据,而不是普通的字符串. 制数据,而不是普通的字符串.这两种数据类 型没有对应的字符集, 型没有对应的字符集,对它们的排序或比较也 都只是基于二进制值的比较, 都只是基于二进制值的比较,而不是字符集的 比较. 比较. BINARY和VARBINARY的最大长度与 的最大长度与CHAR 和 的最大长度与 类型一样, 和VARCHAR类型一样,唯一的区别是 类型一样 BINARY和VARBINARY类型的最大长度是指 和 类型的最大长度是指 的字节数, 的字节数,而CHAR和VARCHAR类型的最大 和 类型的最大 长度则是指的字符数. 长度则是指的字符数. 2.2 BINARY和VARBINARY 和 MySQL在存储 在存储BINARY类型时, 会在数 类型时, 在存储 类型时 据的尾部追加0x00(数字 )以确保长度 据的尾部追加 (数字0) 为指定的长度, 但在执行SELECT语句 为指定的长度 , 但在执行 语句 会不会主动删除掉尾部的0x00. 同时 , 会不会主动删除掉尾部的 . 同时, 尾部的0x00也会参与比较和排序 , 甚至 尾部的 也会参与比较和排序, 也会参与比较和排序 会 影 响 到 DISTINCT 关 键 字 . 另 外 , 0x00与空格也不相等,0x00<空格. 与空格也不相等, 空格. 与空格也不相等 空格 2.3 BLOB和TEXT 和 使用 使用BLOB和TEXT保存数据时,不会发 和 保存数据时, 保存数据时 生数据的变化. 生数据的变化. BLOB BLOB用于保存大型二进制数据, 用于保存大型二进制数据, 用于保存大型二进制数据 MySQL中共有四种 中共有四种BLOB型的数据类型: 型的数据类型: 中共有四种 型的数据类型 TINYBLOB,BLOB,MEDIUMBLOB , , 和LONGBLOB. . 2.3 BLOB和TEXT 和 这四种类型的区别只是能够保存的数据 的最大长度不同. 的最大长度不同. 对TEXT类型的数据进行比较时, 类型的数据进行比较时, 类型的数据进行比较时 MySQL会忽略数据尾部的空格,如果两 会忽略数据尾部的空格, 会忽略数据尾部的空格 个字符串仅仅是尾部的空格数量不一致, 个字符串仅仅是尾部的空格数量不一致, 会被判断为相等的字符串. 会被判断为相等的字符串. 2.3 BLOB和TEXT 和 TEXT TEXT类型用于保存大型字符串.与 类型用于保存大型字符串. 类型用于保存大型字符串 BLOB类型一样,TEXT类型也分为 类型一样, 类型一样 类型也分为 TINYTEXT,TEXT,MEDIUMTEXT , , 四种类型, 和LONGTEXT四种类型,各类型能够存 四种类型 储的最大字节数与对应的BLOB类型一 储的最大字节数与对应的 类型一 致. 2.3 BLOB和TEXT 和 BLOB类型用于存储二进制类型的数据, 类型用于存储二进制类型的数据, 类型用于存储二进制类型的数据 TEXT类型用于存储标准字符串数据.BOLB 类型用于存储标准字符串数据. 类型用于存储标准字符串数据 类型的数据在进行比较时, 类型的数据在进行比较时,会用二进制数据进 行比较, 行比较,TEXT类型的数据都有相对应的字符 类型的数据都有相对应的字符 集,在进行比较时也是基于字符集进行比较 当插入的数据长度超过指定的长度时, 当插入的数据长度超过指定的长度时, MySQL会截断数据,同时发出警告信息.如 会截断数据, 会截断数据 同时发出警告信息. 工作在" 果MySQL工作在"STRICT"模式,则会产生 工作在 "模式, 错误. 错误. 2.4 枚举 枚举ENUM ENUM枚举类型的数据可以理解成只能 枚举类型的数据可以理解成只能 取指定的几个值的字符串, 取指定的几个值的字符串,其可以取的 值在建表时就在列定义中列出了清单. 值在建表时就在列定义中列出了清单. 值列表中的数据必须是用引号引出来的 字符串, 字符串,而不能是一个运算表达式或字 符串变量,换句话说, 符串变量,换句话说,不能使用用户定 义的变量作为枚举类型的值列表中的值. 义的变量作为枚举类型的值列表中的值. 2.4 枚举 枚举ENUM 在以下情况下,值列表中的值可以是空字符串 在以下情况下, '')或空值( ('')或空值(NULL): ): 1.如果将一个无效值 不在值列表中的字符串 不在值列表中的字符串) .如果将一个无效值(不在值列表中的字符串 类型的列时, 插入一个 ENUM类型的列时,MySQL会将空 类型的列时 会将空 字符串作为一个特殊的错误值插入到该列中. 字符串作为一个特殊的错误值插入到该列中. 事实上,这个空字符串会被保存成0x00,只是 事实上,这个空字符串会被保存成 , 显示时显示会空字符串, 显示时显示会空字符串,这个问题我们等一会 儿再详细讨论. 儿再详细讨论. 如果 如果MySQL是工作在"STRICT"模式,插入 是工作在" 模式, 是工作在 模式 无效值则会产生错误. 无效值则会产生错误. 2.4 枚举 枚举ENUM 2.如果一个ENUM类型的列被设置成允 .如果一个 类型的列被设置成允 许NULL值,则可以将 值 则可以将NULL值直接赋值 值直接赋值 给该类型的列,而且MySQL会将该列的 给该类型的列,而且 会将该列的 默认值也设置为NULL.如果一个 默认值也设置为 . ENUM类型的列被声明为 类型的列被声明为NOT NULL, , 类型的列被声明为 该列的默认值将是该ENUM类型的值列 该列的默认值将是该 类型的值列 表中的第一个成员. 表中的第一个成员. 2.4 枚举 枚举ENUM MySQL在保存 在保存ENUM类型的数据值,并不会保存值列 类型的数据值, 在保存 类型的数据值 表中的字符串值, 表中的字符串值,而是为值列表中的每个字符串值分。