MySQL学习——数据类型

摘要:本文主要学习了MySQL数据库的数据类型。

整数类型

MySQL主要提供的整数类型有tinyint、smallint、mediumint、int、bigint,其属性字段可以添加auto_increment自增约束条件。

下图中列出了MySQL中的数值类型:

有的情况下定义整型的写法是 int(N) ,这种写法只需要记住两点:

1)无论N等于多少,int永远占4个字节。

2)N表示的是显示宽度,不足的用0补足,超过的无视长度而直接显示整个数字,但这要整型设置了unsigned zerofill才有效。

浮点类型

浮点类型有两种,分别是单精度浮点数(float)和双精度浮点数(double),数值类型如下:

定义浮点类型可以用(M,D)来表示,其中M称为精度,表示总共的位数,D称为标度,表示小数的位数。

定点类型

因为浮点型的float、double存在精度丢失问题,即写入数据库的数据未必是插入数据库的数据,而decimal无论写入数据中的数据是多少,都不会存在精度丢失问题,这就是引入decimal类型的原因,decimal类型常见于银行系统、互联网金融系统等对小数点后的数字比较敏感的系统中。

decimal(M,D)的规则和float、double相同,但区别在float、double在不指定M、D时默认按照实际精度来处理,而decimal在不指定M、D时默认为decimal(10,0)。

日期和时间类型

MySQL支持五种形式的日期类型:date、time、year、datetime、timestamp,用一张表格总结一下这五种日期类型:

MySQL的时间类型中datetime与timestamp两种类型的区别:

1)datetime占8个字节,timestamp占4个字节。

2)由于大小的区别,datetime与timestamp能存储的时间范围也不同。

3)datetime默认值为空,当插入的值为null时,该列的值就是null;timestamp默认值不为空,当插入的值为null的时候,mysql会取当前时间。

4)datetime存储的时间与时区无关,timestamp存储的时间及显示的时间都依赖于当前时区。

在实际工作中,一张表往往会有两个默认字段,一个记录创建时间而另一个记录最新一次的更新时间,这种时候可以使用timestamp类型来实现。

字符串类型

字符串类型用来存储字符串数据,还可以存储图片和声音的二进制数据。字符串可以区分或者不区分大小写的串比较,还可以进行正则表达式的匹配查找。

MySQL中的字符串类型有char、varchar、tinytext、text、mediumtext、longtext、enum、set等。

下表中列出了MySQL中的字符串数据类型,括号中的M表示可以为其指定长度:

char类型

char(M)是固定长度字符串,存储时在右侧填充空格以达到指定的长度,查询时会删除尾部的空格。

varchar类型

varchar(M)是可变长度的字符串,存储的是字符串的实际内容。

text类型

text也是可变长度的字符串,保存非二进制字符串,如文章内容、评论等。text类型有4种:tinytext、text、mediumtext和longtext。

enum类型

enum是一个字符串对象,值为表创建时设定的枚举值,最多可以有65535个元素。语法格式如下:

 字段名 enum('值1', '值1', …, '值n')

字段名是将要定义的字段,值n指枚举列表中第n个值。

enum类型的字段在取值时,能在指定的枚举列表中获取,而且一次只能取一个,如果创建的成员中有空格,尾部的空格将自动被删除。

enum值依照列索引顺序排列,并且空字符串排在非空字符串前,null值排在其他所有枚举值前。

enum列总有一个默认值。如果将enum列声明为null,null值则为该列的一个有效值,并且默认值为null。如果enum列被声明为not null,其默认值为允许的值列表的第1个元素。

set类型

set是一个字符串的对象,值为表创建时规定的一列值,最多可以有64个成员。语法格式如下:

 字段名 set('值1', '值2', …, '值n')

与enum类型相同,set值在内部用整数表示,列表中每个值都有一个索引编号。当创建表时,尾部空格将自动删除。

与enum类型不同的是,enum类型的字段只能从定义的列值中选择一个值插入,而set类型的列可从定义的列值中选择多个字符的联合。

如果插入set字段中的列值有重复,则mysql自动删除重复的值。并且插入set字段的值的顺序并不重要,mysql会在存入数据库时,按照定义的顺序显示。如果插入了不正确的值,默认情况下,mysql将忽视这些值,给出警告。

二进制字符串类型

MySQL中的二进制字符串有BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。

下表中列出了MySQL中的二进制数据类型,括号中的M表示可以为其指定长度:

bit类型

位字段类型。M表示每个值的位数,范围为1~64。如果M被省略,默认值为1。如果为bit(M)列分配的值的长度小于M位,在值的左边用0填充。

bit数据类型用来保存位字段值,例如以二进制的形式保存数据13,13的二进制形式为1101,在这里需要位数至少为4位的bit类型,即可以定义列类型为bit(4)。大于二进制 1111 的数据是不能插入 bit(4) 类型的字段中的。

默认情况下,MySQL不可以插入超出该列允许范围的值,因而插入数据时要确保插入的值在指定的范围内。

binary类型

binary类型的长度是固定的,指定长度后,不足最大长度的,将在它们右边填充“\0”补齐,以达到指定长度。

varbinary类型

varbinary类型的长度是可变的,指定好长度之后,长度可以在0到最大值之间,实际占用的空间为字符串的实际长度加1。

blob类型

blob是一个二进制的对象,用来存储可变数量的数据。blob类型分为4种:tinyblob、blob、mediumblob和longblob,它们可容纳值的最大长度不同。

MySQL学习——数据类型的更多相关文章

  1. 我的MYSQL学习心得(二) 数据类型宽度

    我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  2. 我的MYSQL学习心得(四) 数据类型

    我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...

  3. Mysql学习笔记(二)数据类型 补充

    原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...

  4. Mysql学习笔记(一)数据类型

    原文:Mysql学习笔记(一)数据类型 学习内容: Mysql基本数据类型. 1.数字类型.. i.整型     Mysql数据类型             含义(有符号)     tinyint(m ...

  5. MySQL学习4 - 数据类型一

    介绍 一.数值类型 二.浮点型 验证三种类型建表 验证三种类型的精度 三.日期类型 综合练习: 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选 ...

  6. MYSQL学习笔记——数据类型

    mysql的数据类型可以分为三大类,分别是数值数据类型.字符串数据类型以及日期时间数据类型. 数值数据类型                                               ...

  7. 高性能MySQL学习总结二----常见数据类型选择及优化

    一.数据类型的选择 MySQL的数据类型有很多种,选择正确的数据类型对于获得高性能特别地重要,如何选择合适的数据类型呢?主要遵从以下三个原则: 1.更小的通常情况下性能更好 一般情况下,应该尽量使用可 ...

  8. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  9. 0042 MySQL学习笔记-入门--01

    基本概念: 数据库DB(database): 数据的仓库,数据的集合,是数据的一种结构化的存储 数据库管理系统DBMS(database management system): 管理数据库的一套软件 ...

随机推荐

  1. linux命令-挂载命令

    一.挂载命令 1.mount 命令基本格式 linux 所有存储设备都必须挂载使用,包括硬盘 命令名称:mount 命令所在路径:/bin/mount 执行权限:所有用户 [root@localhos ...

  2. maven修改运行环境配置

    maven中自带的tomcat是6版本,比如我们想用tomcat7,jdk1.8,我们就要通过配置来改变. 改变方式如下 <build> <plugins> <plugi ...

  3. SpringCloud(七):springcloud-config统一管理配置中心

    前言: Spring Cloud Config组件是独立的,不需要注册到eureka.config工作原理是把读取目标到配置拉取到本地缓存一份然后供给其他客户端使用,所以一旦config启动成功,可以 ...

  4. 一文学会JVM配置参数与工具使用

    经过前面的各种分析,我们知道了关于JVM很多的知识,比如版本信息,类加载,堆,方法区,垃圾回收等,但是总觉得心里不踏实,原因是没看到实际的一些东西. 所以这在本文,咱们就好好来聊一聊关于怎么将这些内容 ...

  5. PHP mysqli_fetch_object MySQLi 函数

    定义和用法 mysqli_fetch_object - 返回结果集的当前行作为对象 版本支持 PHP4 PHP5 PHP7 不支持 支持 支持 语法 mysqli_fetch_object ( mys ...

  6. Python 第一個程序

    以默認方式安裝,會將 Python 安裝在目錄 C:\Users\Administrator\AppData\Local\Programs\Python\Python37 下: 有趣的是: 在此目錄下 ...

  7. jt格式文件与3D数据压缩

    介绍 JT是西门子公司推出的PLM通用三维格式,设计为一个开放.高效率的.紧凑,持久性存储的产品数据格式,用于产品可视化.协作和CAD数据共享.JT文件格式包括多方面的数据,以及对曲面边的精准表示,产 ...

  8. DenyHosts

    下载软件并解压cd DenyHosts-2.6 #进入安装解压目录python setup.py install #安装DenyHostscd /usr/share/denyhosts/ #默认安装路 ...

  9. LeetCode解题笔记 - 1. Two Sum

    1. Two Sum Given an array of integers, return indices of the two numbers such that they add up to a ...

  10. JavaScript中随机打乱一个数组

    JavaScript中随机打乱一个数组 function shuffle(arr) { let i = arr.length; while (i) { let j = Math.floor(Math. ...