MySQL 入门(三)—— MySQL数据类型

MySQL的数据类型包括整数类型、浮点数类型、定点数类型、日期和时间类型、字符串类型和二进制数据类型。不同数据类型决定了数据的存储格式、有效范围和相应的限制。


1、整数类型

MySQL支持的整数类型如下表所示

MySQL支持数据类型的名称后面指定该类型的显示宽度,基本形式如下:

数据类型(显示宽度)

显示宽度指能够显示的最大数据的长度。在不指定宽度的情况下,整数类型的默认显示宽度与其有符号数的最大值的显示宽度相同。如INT型为11,BIGINT型为20。

但实际上,即使出入的数据的宽度大于了设置的显示宽度,但只要小于等于默认宽度,就可以正常完整的显示出来。

2、浮点数类型和定点数类型

浮点数类型和定点数类型用来表示小数。包括以下类型

其中,定点数类型的M指精度,是数据的总长度。小数点并不占位置,D为标度,指小数点后的长度。当插入数据的精度高于实际定义的精度时,系统会自动进行四舍五入处理。浮点数类型FLOAT和DOUBLE在四舍五入时不会报错,但定点数类型DECIMAL会有警告。

当未指定精度时,DECIMAL型会默认整数位为10,小数位为0,即默认为整数。

由于定点数在MySQL中是以字符串形式存储的,其精度比浮点数高,而且浮点数会出现误差,在对数据精度要求高的情况下,选择DECIMAL比较安全。

3、日期和时间类型

当插入的数据值超过了该类型的取值范围时,系统会报错,并将相应的零值插入到数据库中。

3.1 Year类型

向Year类型插入数据时可以直接用数字也可以用字符串,对于低于4位的会自动转换,如输入32,‘78’,3,‘2’会分别转换为2032,1978,2003和2002。

注意‘0’和‘00’都会转换为2000,而0会转化为0000。

3.2 Time类型

Time类型的数据赋值方式如下

‘D HH:MM:SS’格式的字符串,或者’HHMMSS’格式的字符串或者HHMMSS格式的数值,其中D表示天数,取值范围为0~34,保存时会自动将D转换到HH处,如输入‘2 11:32:21’会转换为’59:32:21’,当然输入不必严格遵守上述格式,系统会自动转换,具体规则可以自己尝试。如’2 20’,’2 20:20’,’30’和’345454’会转换为’68:00:00’,’68:20:00’,’00:00:30’和’34:54:54’。即基本符合从左向右分配。

当HH和SS的赋值大于60时,即此值无效,系统会报错,并将其转换为00:00:00。在输入数据合法但超出Time值范围时,会被裁为范围内最接近的端点,如’880:00:00’会转换为’838:59:59’。

可以适用CURRENT_TIME和NOW()出入当前系统时间。

3.3 DATE类型

可以适用’YYYY-MM-DD’或’YYYYMMDD’格式的字符串、’YY-MM-DD’或’YYMMDD’格式的字符串、YYYYMMDD或YYMMDD格式的数字表示。

同样可以使用CURRENT_DATE或者NOW()来输入当前系统日期。

3.4 DATETIME类型

DATATIME类型相当于DATE类型和TIME类型的组合。

当某字段的数据类型为DATETIME时,使用NOW()可以输入当前系统日期和时间。

3.5 TIMESTAMP类型

与DATETIME类型相同点:

- 显示格式相同

- 复制方法相同

- 用NOW()转为换系统当前时间

与DATETIME类型不同点:

- 比DATETIME类型范围小

- 使用CURRENT_TIMESTAMP来输入系统当前日期和时间

- 输入NULL或无任何输入时,系统自动输入系统当前日期和时间

- 该类型能够根据不同的地区的时区来转换时间

4、字符串类型

字符串类型包括CHAR、VARCHAR、BLOB、TEXT、ENUM和SET。

4.1 CHAR和VARCHAR类型

两者都是在创建表时就指定了最大长度,基本形式如下

字符串类型(M)

注意CHAR类型的长度是固定的,永远是指定的M,其值可以是0~255的任意值。

而VARCHAR类型的长度是可变的,创建时指定的M只是最大长度,可以取0~65535之间任意值。即在最大值M范围内使用多少分配多少,实际占用空间为字符串的实际长度加1,此1为字符串的结束标志符。因此会保存输入字符串最后的空格,而前者不会。

当出入的字符串长度大于可插入最大值时,系统会阻止插入并报错。

虽然VARCHAR比CHAR占用空间小、更灵活,但处理速度却比不上CHAR型,所以对于长度变化不大和查询速度要求较高的字符串类型,最好还是选择CHAR类型。

4.2 TEXT类型

TEXT类型只能保存字符数据,具体分类有

4.3 ENUM类型

ENUM类型又称为枚举类型。在创建表时,其取值范围就以列表的形式制定了。基本形式如下

属性名 ENUM(‘值1’, ‘值2’, ···,’值n’)

其中,属性名指字段的名称,’值n’表示列表中的第n个值,这些值末尾的空格都会被系统直接删除。

ENUM类型的值只能取列表中的一个元素。取值列表中最多可以有65535个值。列表中的每个值都有一个顺序排列的编号,MySQL中存储的是这个编号而非列表中的具体值。

4.4 SET类型

一般来说,如果只能选取列表中的一个值,就选择ENUM类型,如果需要选取列表中的多个值的组合,则需要选择SET类型。

同样,在创建表时,其取值范围就以列表的形式制定了。基本形式如下

属性名 SET(‘值1’, ‘值2’, ···,’值n’)

具体同ENUM类型。

在取多个元素时,不同元素之间用逗号隔开,SET类型的值最多只能是有64个元素构成的集合。同ENUM,存储的是编号而非具体值。

插入记录时,SET字段中的元素顺序无关紧要,系统会自动按照定义时的顺序显示。

如SET类型的取值类表为(‘A’,’B’,’C’,’D’,’E’),插入值为(‘B’)和(‘C,B,D’)时,结果显示为(B)和(B,C,D)。

5、二进制类型

5.1 BINARY和VARBINARY类型

类似于CHAR和VARCHAR类型的关系和使用方法。

对于CHAR来说,不足最大长度的空间用“\0”补全。

5.2 BIT类型

BIT类型也是在创建表时指定了最大长度,基本形式为

BIT(M)

如字段的类型为BIT(4),则存储的数据是从0~15。

在查询BIT类型的数据时,要用BIN(字段名+0)来将值转换为二进制显示。

5.3 BLOB类型

此为一种特殊的二进制类型,可以用来保存数据量很大的二进制数据,如图片等。包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。

BLOB类型主要用来存储图片、PDF文档等二进制文件。通常来说,可以将这些文件存储在文件系统中,然后在数据库中存储这些文件的路径,这种方式比直接存储在数据库中简单,当然访问速度也会慢一些。

6、选择数据类型

在MySQL中创建表时需要考虑为字段选择哪种数据类型最合适。基本注意事项可以参考上述总结。

下面是一些常见问题

6.1 可以存储路径的数据类型

6.2 BOOL类型

6.3 JPG和MP3等格式的储存

时间: 2024-08-28 06:28:48

MySQL 入门(三)—— MySQL数据类型的相关文章

Mysql的三种数据类型

Mysql的三种数据类型 1.数值类型 2.日期和时间类型 3.字符串类型 00x1 [数值类型] 00x2 [日期和时间类型] 00x3 [字符串类型]

21分钟 MySQL 入门教程 && mysql数据类型

转自:http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html#c1 http://www.cnblogs.com/zbseoag/archive/2013/03/19/2970004.html 21分钟 MySQL 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数据类型 五.使用MySQL数据库 登录

MySQL系列(三) MySQL的约束

约束 数据完整性 constraint 实体完整性保证表中有一个主键,还可以编写触发器保证数据完整性 域完整性保证数据每列的值满足特定条件,可以通过一下途径来保证: 选择适合的数据类型,外键,编写触发器,还可以用default 约束作为强制域完整性的一个方面 参照完整性保证两张表之间的关系 约束的创建和查找: 创建有两种方式: 表建立时就定义约束条件 利用 alter table 来进行约束的更新 唯一索引的默认约束名与列名相同. 约束和索引的区别: 约束是一个逻辑上的概念,用来保证数据的完整性

MySQL入门(三)

写了两篇<MySQL入门>以后我发现,写书的人还是都挺有本事的,起码人家知道怎么编排自己想讲的知识点,我实在是不知道该先说那里后说哪里,那我就想到什么讲什么吧. 一 写SQL 其实我是不想写有关SQL的部分的,因为这个部分其实很简单,基本上大学只要好好听听数据库概论这门课基本上都能写满足功能的SQL,但是后来想想,SQL其实是人和数据库交互的一种接口,不会SQL确实是不可以的,写的不好感觉不出数据库有多么的强大,甚至有可能会让人产生出数据库慢的坏印象. MySQL作为most popular的

DF学Mysql(三)——Mysql数据类型

Mysql数据类型分为:整数类型.浮点数类型.定点数类型日期与时间类型字符串类型二进制类型 整数类型 字节数 无符号数取值范围 有符号数取值范围TINYINT 1 0-255 -128-127SMALLINT 2 0-65535 -32768-32767MEDIUMINT 3 0-16777215 -8388608-8388607INT 4 0-4294967295 -2147483648-2147483647INTGER 4 0-4294967295 -2147483648-214748364

mysql入门-数据类型(一)

mysql数据类型概述 mysql基础就先从支持的数据类型说起,mysql一共支持三种数据类型,数值类型,字符串类型,日期. 数值类型:数值类型又分为两种类型整型和浮点类型 整型:bit.bool.tinyint.smallint.mediumint.int.bigint 浮点型:float.double.decimal 字符串类型:char.varchar.tinytext.text.mediumtext.longtext.tinyblob.blod.mediumblob.longblob 日

MySQL入门(引擎、数据类型、约束)

MySQL入门(二) 表的引擎:驱动数据的方式 - 数据库优化 # 概要:引擎是建表规定的,提供给表使用,不是数据库的 # 展示所有引擎 show engines; # innodb(默认): 支持事务, 行级锁, 外键 create table t11(id int)engine=innodb; # myisam: 查询效率要优于innodb, 当不需要支持事务, 行级锁, 外键, 可以通过设置myisam来优化数据库 create table t12(id int)engine=myisam

MySQL入门笔记(一)

MySQL入门笔记(二) 一.数据类型 1. 整型 2. 浮点型 3. 字符型 4. 日期时间型 二.数据库操作 1. 创建库 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name; ??上述代码中DATABASE和SCHEMA完全相同,可任选一个(花括号内的参数为任选其一): ??添加IF NOT EXISTS的作用则是,若新建数据库的名称与已有数据库名称冲突,则产

MySQL学习笔记之一 MySQL入门

本人之前接触的关系型数据库主要是oracle和sqlserver,而对于mysql知之甚少,但查阅网上资料发现,mysql与oracle非常相似,所以学起来应该不会很费劲,在总结的时候可能更多的把关注点放在它与oracle的不同之处. 一.简介 MySQL是一个真正的多用户.多线程SQL数据库服务器.SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言.MySQL是一个客户端/服务器结构的实现, 它由一个服务器守护程序mysqld和很多不同的客户程序和库组成. MySQL的普及并不局限于

Mysql基础知识:数据类型

Mysql基础数据类型 1. 整数类型 2. 浮点数类型和定点数类型 DECIMAL型的取值范围与DOUBLE相同,但是DECIMAL的有效范围由M.D决定.而且DECIMAL的字节数为M+2,即定点数的存储空间是根据其精度决定的. M:精度,是数据的总长度,小数点不占位置: D:标度,小数点后的长度 eg:FLOAT(6,2):数据长度为6,小数点后保留2位的FLOAT数据类型.按照该定义,1234.56符合要求. 3. 日期和时间类型 YEAR类型:(使用1个字节表示) 可以用4位字符串或数