精华内容
下载资源
问答
  • MySQL中有如下几种数据类型:数值类型MySQL的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数。许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且...

    数据类型是定义列中可以存储什么数据以及该数据实际怎么存储的基本规则。在本文中,我将会详细介绍MySQL数据库中几种常见的数据类型。

    数值类型

    MySQL的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数。许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且MySQL允许我们指定数值字段中的值是否有正负之分或者用零填补。

    整型

    在这里插入图片描述
    表列出了整型数值类型以及它们的允许范围和占用的内存空间。
    在这里插入图片描述
    在MySQL中支持的5个主要整数类型是TINYINT,SMALLINT,MEDIUMINT,INT和BIGINT。这些类型在很大程度上是相同的,只有它们存储的值的大小是不相同的。
    MySQL以一个可选的显示宽度指示器的形式对SQL标准进行扩展,这样当从数据库检索一个值时,可以把这个值加长到指定的长度。定义的基本形式如整型类型(显示宽度)。对于其正确的理解,其实是显示宽度,因为整型的显示宽度,对数值大小无影响,只是当设置了zerofill的时候,在显示的时候补0而已。例如,指定一个字段的类型为INT(8) ZEROFILL,就可以保证所包含数字少于8个的值从数据库中检索出来时会在前面自动补0。如下图所示:
    在这里插入图片描述
    宽度可以不设置,因为整型数据类型都有默认的显示宽度,不设就采用默认的。需要注意的是:

    1. 使用一个宽度指示器不会影响字段的大小和它可以存储的值的范围;
    2. 使用ZEROFILL这个修饰符还可以阻止MySQL数据库存储负值。

    万一我们需要对一个字段存储一个超出许可范围的数字,MySQL会根据允许范围最接近它的一端截短后再进行存储。还有一个比较特别的地方是,MySQL会在不合规定的值插入表前自动修改为0。
    还有,UNSIGNED修饰符规定字段只保存正值。因为不需要保存数字的正、负符号,可以在存储时节约一个“位”的空间,从而增大这个字段可以存储的值的范围。

    浮点型

    MySQL支持二个浮点型。
    在这里插入图片描述

    对M和D的分析

    • 浮点类型中的M和整型的大不相同;
    • 整型中的M与所存数据的大小没有关系,只在有ZEROFILL修饰符时,控制显示填充零的位数有关;
    • 浮点类型中的M与所存数据的大小有必然关系,假如申请类型为float(6,2),其中,6代表浮点类型数不包括小数点在内为6位,其中2代表小数位,因此该列能存入-9999.99到+9999.99范围的数;
    • 如果float(6,2)带有标示符unsigned,则此数据类型的存储范围为0.00到+9999.99;
    • 对于小数点后面的位数超过允许范围的值,MySQL会自动将它四舍五入为最接近它的值,再插入它,但decimal会警告信息。
      在这里插入图片描述
    • 当不指定精度时,float、double默认会保存实际精度,而decimal默认是整数。
      在这里插入图片描述

    定点型

    MySQL支持的定点型为:

    • decimal(M,D)

    decimal数据类型用于精度要求非常高的计算中,这种类型允许指定数值的精度和计数方法作为选择参数。精度在这里指为这个值保存的有效数字的总个数,而计数方法表示小数点后数字的位数。比如语句decimal(7,3)规定了存储的值不会超过7位数字,并且小数点后不超过3位。例如,
    在这里插入图片描述
    由此看出,decimal类型更精确。还请大家注意以下两点:

    1. 忽略decimal数据类型的精度和计数方法修饰符将会使MySQL数据库把所有标识为这个数据类型的字段精度设置为10,计算方法设置为0;
    2. UNSIGNED和ZEROFILL修饰符也可以被FLOAT、DOUBLE和DECIMAL数据类型使用,并且效果与整型数据类型相同。

    小结

    MySQL中可以指定浮点数和定点数的精度,其基本形式为数据类型(M,D)。其中,M为精度,即数据的总长度;D为标度,即小数点后的长度。

    字符串类型

    字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。可以存储的范围从简单的一个字符到巨大的文本块或二进制字符串数据。
    在这里插入图片描述

    CHAR与VARCHAR

    其定义方式为字符串类型(M)。char类型用于定长字符串,并且必须在圆括号内用一个大小修饰符来定义。这个大小修饰符的范围从0-255,比指定长度大的值将被截短,而比指定长度小的值将会用空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
    char类型的一个变体是varchar类型,它是一种可变长度的字符串类型,并且也必须带有一个范围在0-255之间的指示器。char和varchar不同之处在于MySQL数据库处理这个指示器的方式:

    • char把这个大小视为值的大小,在长度不足的情况下就用空格补足;
    • varchar类型把它视为最大值并且只使用存储字符串实际需要的长度(增加一个或二个额外字节来存储字符串本身的长度)来存储值。所以短于指示器长度的varchar类型不会被空格填补,但长于指示器的值仍然会被截短。

    因为varchar类型可以根据实际内容动态改变存储值的长度,所以在不能确定字段需要多少字符时使用varchar类型可以大大地节约磁盘空间、提高存储效率,但char类型的字符串检索速度要比varchar类型的快。

    TEXT

    text分为4种,如下:
    在这里插入图片描述
    text最大64M的字节数,若是换算成中文字符的话,还跟字符类型有关系,比如UTF-8,一个中文为3个字节,那么字符个数就是(64/3)M个数中文字符。关于text这种类型,还须注意以下几点:

    1. text不能用一个大小修饰符来定义,text是实际字符数+2个字节;
    2. text类型不能有默认值,写了默认值也不起作用;
    3. varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。

    二进制类型

    二进制类型是在数据库中存储二进制数据的数据类型。二进制类型包括BINARY、VARBINARY、BIT、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB。
    在这里插入图片描述

    BINARY和VARBINARY

    两者唯一的差别在于BINARY当长度不够时会补\0

    BIT类型

    其定义方式为BIT(M)。其中M指定了该二进制的最大字节长度,M的最大值为64。如BIT(4)就是数据类型为BIT类型,长度为4,其能够存储的值为0-15,因为变成二进制后,15的值为1111。在查询BIT类型的数据时,要用BIN(字段名+0)来将值转换为二进制显示。
    在这里插入图片描述
    上面的结果以二进制显示,最大的长度为4。

    BLOB类型

    BLOB类型是一种特殊的二进制类型。BLOB可以存储数据量很大的二进制数据,如图片,视频等。BLOB类型包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,它们之间的区别也只是最大长度不同而已。

    TEXT和BLOB的区别

    • BLOB和TEXT存储方式不同,TEXT以文本方式存储,英文存储区分大小写,而BLOB是以二进制方式存储,不分大小写;
    • BLOB存储的数据只能整体读出;
    • TEXT可以指定字符集,BLOB不用指定字符集。

    日期和时间类型

    在处理日期和时间类型的值时,MySQL带有5个不同的数据类型可供选择。它们可以被分成简单的日期、时间类型和混合日期、时间类型。根据要求的精度,子类型在每个分类型中都可以使用,并且MySQL带有内置功能可以把多样化的输入格式变为一个标准格式。
    在这里插入图片描述
    TimeStamp类型与DateTime类型在无输入的情况下要注意:

    • TimeStamp使用Current_TimeStamp()而DateTime使用NOW()来获取当前时间;
    • 输入NULL时,系统会输入系统当前日期与时间;
    • 无任何输入时,系统会输入系统当前日期与时间。

    在实际开发中,很少用日期时间类型来表示一个需要精确到秒的列。原因:虽然日期时间类型能精确到秒,而且方便查看,但不易于计算机计算,所以用时间戳来表示。时间戳用int来存储,是1970-01-01 00:00:00到当前的秒数。一般存储注册时间,商品发布时间等,并不是用datetime存储,而是用时间戳。因为datetime虽然直观,但计算不便,而用int型存储时间戳,方便计算,对于显示来说,也可以方便格式化。

    数据类型的选择

    在这里插入图片描述

    问题总结

    存储路径的问题

    MySQL中,如果路径中使用\符号时,这个符号会被过滤。解决的办法是路径中用/来代替\,这样MySQL就不会自动过滤路径中的分隔符。

    MySQL中的布尔类型

    MySQL中没有Bool或Boolean类型,但是为了支持SQL标准,也可以定义Bool或Boolean类型的,但是Bool或Boolean类型最后转换成的是TinyInt(1),也就是说在MySQL中,布尔类型实际上是TinyInt(1)。

    MySQL中如何存储JPG图片或MP3音乐

    一般情况下,数据库中不直接存储图片和音频文件,而是存储图片或音频文件的路径,如果在特殊情况下需要在MySQL数据库中存储图片和音频文件,可以选择BLOB类型。

    参考

    最后,吐露一下心声,写这篇文章真是操碎了心,并参考了一些文章,参考文章有:

    1. MySQL教程 | 菜鸟教程
    2. mysql数据类型 | 来自博客园的泪云山海
    3. MySql数据类型分析 | 来自博客园的小张的学习之旅
    4. mysql数据类型详解 | 来自zanyzhao的ChinaUnix博客
    5. mysql基本数据类型详解 | 来自CSDN的libo222的博客
    展开全文
  • MySQL常见数据类型

    万次阅读 多人点赞 2018-09-15 10:06:51
    MySQL常见数据类型 一、数据类型是什么?  数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。  有一些数据是要存储为数字的,数字当中有些是要...

       不多说,直接上干货!

     

     

     

     

     

     

     

    MySQL常见的数据类型

    一、数据类型是什么?

      数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。

      有一些数据是要存储为数字的,数字当中有些是要存储为整数、小数、日期型等...

     

    二、MYSQL常见数据类型

      MySQL支持多种类型,大致可以分为四类:数值型、浮点型、日期/时间和字符串(字符)类型

     

      1、数值类型

      MySQL支持所有标准SQL数值数据类型。

      这些数值类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。

      关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。

      作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围:

     

      2、 浮点型

      比如,我们发的工资,一般都带有小数。

     

     

      3、日期和时间类型

      表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

      每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

      TIMESTAMP类型有专有的自动更新特性,将在后面描述。

      在生产里,日期时间型,往往用的比较少,而是用数字类型来取代日期类型!

     

     

     

     

      4  字符串类型

      字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。

      CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

      BINARY和VARBINARY类类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

      有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求。

     

      ENUM是枚举类型

      SET是集合类型不同于ENUM类型,它是一个排列组合。假如有abc,它可以选择a或b或c,也有选择是ab,ac,bc,也可以选择abc。

     

     

     

     

    总结

      这些数据类型可以用于数据表或存储过程或以后的函数中,也就是说只要用到数据类型的时候,可以从我们刚讲到的数值型、浮点型、日期/时间和字符串(字符)类型中任意选择

    展开全文
  • MySQL常见数据类型(八)

    千次阅读 2017-03-11 10:17:00
    MySQL常见数据类型 一、数据类型是什么?  数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。  有一些数据是要存储为数字的,数字当中有些是...

     

       不多说,直接上干货!

     

     

     

     

     

     

     

    MySQL常见的数据类型

    一、数据类型是什么?

      数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。

      有一些数据是要存储为数字的,数字当中有些是要存储为整数、小数、日期型等...

     

    二、MYSQL常见数据类型

      MySQL支持多种类型,大致可以分为四类:数值型、浮点型、日期/时间和字符串(字符)类型

     

      1、数值类型

      MySQL支持所有标准SQL数值数据类型。

      这些数值类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。

      关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。

      作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围:

     

      2、 浮点型

      比如,我们发的工资,一般都带有小数。

     

     

      3、日期和时间类型

      表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

      每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

      TIMESTAMP类型有专有的自动更新特性,将在后面描述。

      在生产里,日期时间型,往往用的比较少,而是用数字类型来取代日期类型!

     

     

     

     

      4  字符串类型

      字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。

      CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

      BINARY和VARBINARY类类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

      有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求。

     

      ENUM是枚举类型

      SET是集合类型不同于ENUM类型,它是一个排列组合。假如有abc,它可以选择a或b或c,也有选择是ab,ac,bc,也可以选择abc。

     

     

     

     

    总结

      这些数据类型可以用于数据表或存储过程或以后的函数中,也就是说只要用到数据类型的时候,可以从我们刚讲到的数值型、浮点型、日期/时间和字符串(字符)类型中任意选择。

    展开全文
  • MySQL数据类型详解

    万次阅读 多人点赞 2018-08-13 16:40:22
    上一篇博客中我们学习了MySQL的基础知识以及表结构的相关操作,知道了MySQL中常用的数据类型有数值型、字符串型、日期时间类型 下面我们来使用一下这些数据类型。 数值类型 首先数值类型分为整型和浮点型 我们...

    在上一篇博客中,我们简单的了解了MySQL中的常用数据类型以及约束条件,本篇博客我们来对常用的数据类型做一个详细的介绍

    这里做个简单的回顾:

    MySQL数据类型

    MySQL支持多种类型的SQL数据类型:数值,日期和时间类型,字符串(字符和字节)类型,空间类型和 JSON数据类型等
    数据类型描述使用以下约定:

    • M表示整数类型的最大显示宽度。M表示整数类型的最大显示宽度。对于浮点和定点类型, M是可以存储的总位数(精度)。对于字符串类型, M是最大长度。允许的最大值M取决于数据类型。
    • D适用于浮点和定点类型,并指示小数点后面的位数。最大可能值为30,但不应大于 M-2。
    • [ ] 表示类型定义的可选部分。

    在MySQL中常用数据类型主要分为以下几类

    1. 数值类型
    2. 字符串类型
    3. 日期时间类型

    约束条件

    约束条件就是在给字段加一些约束,使该字段存储的值更加符合我们的预期。

    常用约束条件有以下这些

    • UNSIGNED :无符号,值从0开始,无负数
    • ZEROFILL:零填充,当数据的显示长度不够的时候可以使用前补0的效果填充至指定长度,字段会自动添加UNSIGNED
    • NOT NULL:非空约束,表示该字段的值不能为空
    • DEFAULT:表示如果插入数据时没有给该字段赋值,那么就使用默认值
    • PRIMARY KEY:主键约束,表示唯一标识,不能为空,且一个表只能有一个主键。一般都是用来约束id
    • AUTO_INCREMENT:自增长,只能用于数值列,而且配合索引使用,默认起始值从1开始,每次增长1
    • UNIQUE KEY:唯一值,表示该字段下的值不能重复,null除外。比如身份证号是一人一号的,一般都会用这个进行约束
    • FOREIGN KEY:外键约束,目的是为了保证数据的完成性和唯一性,以及实现一对一或一对多关系

    数值类型

    数值类型包括整数型浮点型定点型

    整数型(精确值)

    • TINYINT[(M)] [UNSIGNED] [ZEROFILL] 范围非常小的整数,有符号的范围是 -128到127,无符号的范围是0到 255
    • SMALLINT[(M)] [UNSIGNED] [ZEROFILL] 范围较小的整数,有符号的范围是 -32768到32767,无符号的范围是0到 65535
    • MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] 中等大小的整数,有符号的范围是 -8388608到8388607,无符号的范围是0到 16777215。
    • INT[(M)] [UNSIGNED] [ZEROFILL] 正常大小的整数,有符号的范围是 -2147483648到 2147483647。无符号的范围是 0到4294967295。
    • BIGINT[(M)] [UNSIGNED] [ZEROFILL] 大整数,有符号的范围是 -9223372036854775808到 9223372036854775807,无符号的范围是0到 18446744073709551615。

    这里写图片描述

    上面出现了两个词,有符号和无符号。
    我们来看看 有符号和无符号(UNSIGNED) 是啥玩意

    在计算机中,可以区分正负的类型,称为有符号类型。无正负的类型,称为无符号类型。
    简单的理解为就是
    有符号值可以表示负数,0以及正数
    无符号值只能为0或正数

    关于有符号和无符号详解可以看这篇文章或者自己百度百科。

    这里我们就不关心原理了,我们只需要知道有符号数可以表示负数,无符号数只能为非负数即可,如果不手动指定UNSIGNED,那么默认就是有符号的

    下面我们用一下整数型数据
    首先创建一个表

    CREATE TABLE int_db(
    a TINYINT,
    b SMALLINT,
    c MIDDLEINT,
    d INT,
    e BIGINT
    );
    

    查看表结构

    这里写图片描述

    我们来看看type这一列,可以看到,每个字段类型后面都有一个括号,括号里面的有个数值,这个数值实际上就是字段的显示宽度,也就是M的值,M表示整数类型的最大显示宽度。最大显示宽度为255.显示宽度与类型可包含的值范围无关

    我们在创建表的时候并没有指定字段类型的显示宽度,那么,默认的显示宽度则是该字段类型最大的显示宽度

    例如字段a的显示宽度为4,是因为TINYINT有符号值的范围是-128到127,
    -128的长度为4(负号、1、2、8共四位),所以默认的显示宽度最大为4,其他的以此类推

    下面我们再新建一个表,将字段a的修改为无符号类型的。再看看a字段的默认显示宽度
    这里写图片描述

    可以看到,默认显宽度就变成3了,因为无符号的TINYINT的值范围为0-255,没有负号,所以最多是3位。

    ZEROFILL
    下面我们来试试ZEROFILL约束,前面的博客中我们知道。使用该约束后当数据的长度比我们指定的显示宽度小的时候会使用前补0的效果填充至指定长度,字段会自动添加UNSIGNED

    下面我们新建个表试一下,这次我们来指定一下显示宽度

    CREATE TABLE int_db2(
    a TINYINT(8) ZEROFILL,
    b TINYINT(5) UNSIGNED);
    

    然后插入一条记录:

    INSERT int_db2() VALUES(12,12);
    

    这里写图片描述
    可以看到,12变成了00000012,自动在前面补了0,这是因为指定的显示宽度是8,但是12只有两位,所以在前面补0,使长度为8。这就是ZEROFILL的效果

    浮点型

    • FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
      一个小的(单精度)浮点数。允许值是-3.402823466E+38 到-1.175494351E-38, 0以及1.175494351E-38 到3.402823466E+38,M是总位数,D是小数点后面的位数。
    • DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
      正常大小(双精度)浮点数。允许值是 -1.7976931348623157E+308到-2.2250738585072014E-308,0以及 2.2250738585072014E-308到 1.7976931348623157E+308。M是总位数,D是小数点后面的位数

    下面我们来用一下浮点型
    创建表

    CREATE TABLE float_db(
    a FLOAT(3,2),
    b DOUBLE(5,3)
    )
    

    我们指定a字段为FLOAT类型,总长度为3,小数点后两位为2,b字段总长度为5,小数点后两位长度为3

    这里写图片描述

    插入数据

    INSERT float_db VALUES(1.111,2.113);
    

    这里写图片描述

    可以看到,我们给a字段的值是1.111,但是只存进去了1.11
    浮点数存在精度丢失的问题,如果涉及到小数运算,尽量不要用浮点型

    定点型

    • DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
      常用于存储精确的小数,M是总位数,D是小数点后的位数。小数点和(负数) -符号不计入 M。如果 D为0,则值没有小数点或小数部分。最大位数(M)为 65. 最大支持小数(D)为30.如果D省略,则默认值为0.如果M省略,则默认值为10。M的范围是1到65。D范围为0到30,且不得大于M。

    我们来用一下DECIMAL类型

    首先创建表,先不指定M和D

    CREATE TABLE decimal_db(a DECIMAL);
    

    这里写图片描述

    可以看到,默认的总长度(M)为10,小数点位数(D)默认为0.

    插入一条数据

    INSERT decimal_db VALUES(30.556)
    

    这里写图片描述

    可以看到,存进去的数值被四舍五入阶段了,也就是说,DECIMAL也在存储时存在精度丢失的问题

    超出范围和溢出处理

    当MySQL将值存储在超出列数据类型允许范围的数值列中时,结果取决于当时生效的SQL模式:
    如果启用了严格的SQL模式,则MySQL会根据SQL标准拒绝带有错误的超出范围的值,并且插入失败。
    如果未启用限制模式,MySQL会将值截断到列数据类型范围的相应端点,并存储结果值,并产生一个警告

    在我们的配置文件中可以看到SQL模式的配置,关于SQL模式详情请看SQL模式官方文档

    这里写图片描述


    字符串类型

    常用的字符串类型有如下

    • CHAR[(M)] 一个固定长度的字符串,在存储时始终用空格填充指定长度。 M表示以字符为单位的列长度。M的范围为0到255.如果M省略,则长度为1,存储时占用M个字节
    • VARCHAR(M)可变长度的字符串,M 表示字符的最大列长度,M的范围是0到65,535,存储时占用**L+1(L<=M,L为实际字符的长度)**个字节
    • TINYTEXT[(M)] 不能有默认值,占用L+1个字节,L<2^8
    • TEXT[(M)] 不能有默认值,占用L+2个字节,L<2^16
    • MEDIUMTEXT[(M)] 不能有默认值,占用L+3个字节,L<2^24
    • LONGTEXT[(M)] 不能有默认值,占用L+4个字节,L<2^32
    • ENUM('value1','value2',...) ENUM是一个字符串对象,其值从允许值列表中选择,它只能有一个值,从值列表中选择,最多可包含65,535个不同的元素
    • SET('value1','value2',...) 字符串对象,该对象可以有零个或多个值,最多可包含64个不同的成员

    CHAR和VARCHAR

    创建表

    CREATE TABLE str_db(
    a CHAR(4),
    b VARCHAR(4));
    

    插入数据

    INSERT str_db() VALUES("","");
    INSERT str_db() VALUES("ab","ab");
    INSERT str_db() VALUES("abcd","abcd");
    INSERT str_db() VALUES("abcdefg","abcdefg");//在严格模式下,该条数据会插入失败,非严格模式则会对数据进行截取
    

    这里写图片描述

    我们看到查询的结果是一样的,但实际上他们存储时占用的长度是不一样的。
    CHAR类型不管存储的值的长度是多少,都会占用M个字节,而VARCHAR则占用实际长度+1个字节。

    这里写图片描述

    但是CHAR的查询效果要高于VARCHAR,所以说,如果字段的长度能够确定的话,比如手机号,身份证号之类的字段,可以用CHAR类型,像地址,邮箱之类的就用VARCHAR

    TEXT系列

    TEXT系列的存储范围比VARCHAR要大,当VARCHAR不满足时可以用TEXT系列中的类型。需要注意的是TEXT系列类型的字段不能有默认值,在检索的时候不存在大小写转换,没有CHAR和VARCHAR的效率高

    这里写图片描述

    ENUM

    枚举类型
    创建表

    CREATE TABLE enum_db(gender ENUM("男","女"));
    

    这里写图片描述

    插入数据

    INSERT enum_db() VALUES("男");
    INSERT enum_db() VALUES(1); 也可以使用编号插入值,等同于"男",序号从1开始
    INSERT enum_db() VALUES("女");
    INSERT enum_db() VALUES(2);等同于"女"
    

    这里写图片描述

    下面我们插入一条不是枚举集合中的数据试一下

    这里写图片描述

    可以看到是插入失败的

    SET

    在ENUM中我们只能从允许值列表中给字段插入一个值,而在SET类型中可以给字段插入多个值

    创建表

    
    CREATE TABLE set_db(
    a SET('1','2','3','4','5')
    
    )
    

    这里写图片描述

    插入数据

    
    INSERT set_db() VALUES('1')
    INSERT set_db() VALUES('1,2,3')
    

    这里写图片描述


    日期时间类型

    • TIME 范围是’-838:59:59.000000’ 到’838:59:59.000000’
    • DATE 支持的范围是 '1000-01-01’到 ‘9999-12-31’
    • DATETIME 日期和时间组合。支持的范围是 '1000-01-01 00:00:00.000000’到 ‘9999-12-31 23:59:59.999999’。
    • TIMESTAMP 时间戳。范围是’1970-01-01 00:00:01.000000’UTC到’2038-01-19 03:14:07.999999’UTC。
    • YEAR 范围是 1901到2155

    TIME

    我们可以看到TIME的存储范围是’-838:59:59’到 ‘838:59:59’,因为TIME类型不仅可以用于表示一天中的时间(,还可以用于表示两个事件之间的经过时间或时间间隔

    TIME的完整的显示为 D HH:MM:SS
    D:表示天数,当指定该值时,存储时小时会先乘以该值
    HH:表示小时
    MM:表示分钟
    SS:表示秒

    创建表:

    CREATE TABLE time_db(
    a TIME
    )
    

    插入值:

    INSERT time_db() VALUES('22:14:16');
    --   -2表示间隔了2两天
    INSERT time_db() VALUES('-2 22:14:16');
    -- 有冒号从小时开始
    INSERT time_db() VALUES('14:16');
    -- 没有冒号且没有天数则数据从秒开始
    INSERT time_db() VALUES('30');
    -- 有天数也从小时开始
    INSERT time_db() VALUES('3 10');
    -- 直接使用数字代替也可以
    INSERT time_db() VALUES(253621);
    

    这里写图片描述

    DATE

    创建表

    CREATE TABLE date_db(
    a DATE)
    

    插入数据

    INSERT date_db() VALUES(20180813);
    INSERT date_db() VALUES("2018-06-1");
    INSERT date_db() VALUES("2018-4-1");
    INSERT date_db() VALUES("2018-04-07");
    

    这里写图片描述

    DATETIME

    创建表

    CREATE TABLE datetime_db(
    a DATETIME
    )
    
    

    插入数据

    INSERT datetime_db() VALUES(20180102235432);
    INSERT datetime_db() VALUES("2015-04-21 21:14:32");
    INSERT datetime_db() VALUES("2015-04-23");
    

    这里写图片描述

    TIMESTAMP

    TIMESTAMP和DATETIME使用上差不多,但是范围相对较小。

    创建表

    CREATE TABLE timestamp_db(
    a TIMESTAMP
    )
    
    

    插入数据

    INSERT timestamp_db() VALUES(20020121);
    INSERT timestamp_db() VALUES(20020121142554);
    INSERT timestamp_db() VALUES("2015-12-16 21:14:15");
    INSERT timestamp_db() VALUES("2015-12-17");
    INSERT timestamp_db() VALUES(NULL);
    INSERT timestamp_db() VALUES(CURRENT_TIMESTAMP);
    INSERT timestamp_db() VALUES();
    

    这里写图片描述

    YEAR

    创建表

    CREATE TABLE year_db(
    a YEAR
    )
    

    插入数据

    INSERT year_db() VALUES("1993");
    INSERT year_db() VALUES(1993);
    

    这里写图片描述


    MySQL中的常用数据类型大概就这些,我们在建表的时候要选择合适的数据类型定义字段。

    下一篇:

    MySQL表数据的增删改(DML)


    如果你觉得本文对你有帮助,麻烦动动手指顶一下,可以帮助到更多的开发者,如果文中有什么错误的地方,还望指正,转载请注明转自喻志强的博客 ,谢谢!

    展开全文
  • mysql decimal数据类型转换

    万次阅读 2018-11-28 10:31:30
    当我使用python 读取到内存中时,总是带着 decimal字符, 再写入其它mysql表中时,数据类型为int型,导致数据入库不成功. import pymysql # 创建数据库连接 con = pymysql.connect() sql = '''select created_time ...
  • MySQL Connector/J 对于 MySql 数据类型和 Java 数据类型之间的转换是很灵活的。一般来讲,任何 MySql 数据类型都可以被转换为一个 java.lang.String,任何 MySql 数字类型都可以被转换为任何一种 Java 数字类型...
  • MySQL数据类型选择

    万次阅读 2021-03-01 13:50:35
    MySQL数据类型设置方面,尽量采用更小的数据类型,因为它们占用的存储空间更小,通常有更好的性能,花费更少的硬件资源。并且,尽量把字段定义为NOT NULL,避免使用NULL。 1.字符串类型 类型 大小 用途 ...
  • MySQL数据类型介绍

    万次阅读 2015-02-10 10:55:34
    一、MySQL数据类型 主要包括以下五大类: 整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT 浮点数类型:FLOAT、DOUBLE、DECIMAL 字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM ...
  • 说说 MySQL JSON 数据类型

    万次阅读 2017-12-08 12:45:16
     今天我们来说一说,MySQL JSON数据类型,JSON我相信大家都已经很熟悉了,(Java对象与JSON互转,可以查看《fastjson详解》这篇文章),但在 MySQL中,直至 5.7 版本中,才正式引入 JSON数据类型。在次之前,...
  • MySQL】12-常见数据类型

    千次阅读 2020-04-10 09:57:46
    常见类型 原则: 一、整型 特点: zerofill 默认无符号 二、小数 (1)浮点型 (2)定点型 三、字符型 (1)较短 (2)enum枚举型 (3)set型 四、日期型 datetime 和 datestamp 区别 ...
  • Java数据类型和MySql数据类型对应关系
  • mysql 基本数据类型之整数型

    千次阅读 2018-08-31 20:17:33
    mysql 基本数据类型之整数型 不嫌弃的话可以点个赞回个评论哦,有什么不足的地方请指出,我会虚心学习的,谢谢 : 基本数据类型之整数型 表格 类型 大小 范围(有符号) 范围(无符号) 用途 ...
  • MYSQL 数据类型 介绍

    万次阅读 2018-09-11 16:09:55
    一、MySQL数据类型 主要包括以下五大类: 1.整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT 2.浮点数类型:FLOAT、DOUBLE、DECIMAL 3.字符串类型:CHAR、VARCHAR、TINY TEXT、...
  • 一、MySQL数据类型 二、MySQL数据类型与Java数据类型对应关系
  • MySql 数据类型

    万次阅读 多人点赞 2018-06-06 14:39:42
    Mysql支持的多种数据类型主要有:数值数据类型、日期/时间类型、字符串类型。 整数 浮点数&定点数 注:定点数以字符串形式存储,对精度要求高时使用decimal较好;尽量避免对浮点数进行减法和比较运算...
  • MySQL DECIMAL数据类型

    万次阅读 多人点赞 2015-10-22 16:43:57
    同事问MySQL数据类型DECIMAL(N,M)中N和M分别表示什么含义,M不用说,显然是小数点后的小数位数,但这个N究竟是小数点之前的最大位数,还是加上小数部分后的最大位数?这个还真记不清了。于是乎,创建测试表验证了...
  • 因为某种需求,想要获取到mysql中所有的数据类型,就和sql server中 SELECT * FROM sys.types的效果一样(就比如mysql的客户端中创建表的时候,在选择字段类型的时候,那个下拉列表所列出的类型是怎么查出来的,然道...
  • mysql建表时常用的数据类型

    千次阅读 2019-05-06 12:59:31
    数据类型是什么? 数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,...mysql常见数据类型如下: <1>整数型 类型 大小 范围(有符号) 范围(无符号unsigned) 用途 T...
  • mysql数据类型的长度

    万次阅读 2015-11-13 14:24:12
    mysql数据类型的长度 ...因为最近要登记一些长度较大的数值,今天才仔细...当然,在mysql中使用界面创建表(不使用sql语句创建表),若不指定长度,它会为你指定默认长度,下面对mysql常见的几种数据类型的默
  • mysql BLOB数据类型分类

    千次阅读 2018-11-03 13:46:35
    mysql BLOB是是一个二进制大对象,可以容纳可变数量的数据,下面分别说说mysql BLOB数据类型分类,可以分为 有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。来自www.oceanoemchina.com,分别讲述其...
  • MySQL 数据类型转化

    千次阅读 2019-04-16 23:08:11
    但是要特别注意,可以转换的数据类型是有限制的。这个类型可以是以下值其中的一个: 二进制,同带binary前缀的效果 : BINARY 字符型,可带参数 : CHAR() 日期 : DATE 时间: TIME 日期时间型 : DATETIME 浮点数 : ...
  • MySQL数据类型--整数类型

    万次阅读 2016-03-15 16:53:33
    OK,现在我们开始研究MySQL数据类型MySQL提供了多种数据类型,其中包括整数类型,浮点数类型,定点数类型,日期和时间类型,字符串类型和二进制数据类型mysql支持的所有的数据类型 不同的数据...
  • Mysql系列第二讲 详解mysql数据类型(重点)

    万次阅读 多人点赞 2020-09-10 10:56:12
    Mysql系列第二讲MySQL数据类型整数类型示例1:有符号类型示例2:无符号类型类型(n)说明示例1(重点)示例2日期类型字符串类型mysql类型和java类型对应关系数据类型选择的一些建议 MySQL数据类型 主要包括以下五大...
  • Mysql数据类型

    千次阅读 2009-08-21 15:16:00
    我们要把现实世界中的各种信息转换成计算机能理解的东西,这些转换后的信息就形成了数据。例 如,某人的出生日期是“1987年5月23日”,他的身高是170厘米,等等...1. MySQL数据类型MySQL中有如下几种数据类型:(1
  • mysql float数据类型和decimal数据类型

    千次阅读 2017-07-10 14:07:23
    我们知道在MySQL中有3种类型可以表示实数,分别是float,double和decimal。关于如何合理得使用这三种类型,网上的答案也层出不穷。但是究竟该选择哪一种类型,好像并没有统一的答案,接下来,将通过一个例子来说明...
  • mysql查看数据类型命令

    千次阅读 2018-01-02 11:47:31
    有两个很重要很实用的命令 ... 显示搜索支持的数据类型 help varchar; 显示varchar类型的详细信息 help int; help Integer; help …;事实上这些东西在官网也可以获取到,但是每次都上官网必然麻烦
  • mysql修改数据类型

    万次阅读 2017-11-29 14:25:45
    例如:student表中列sname的类型是char(20),现在要修改为varchar(20),SQL语句如下  alter table student modify column sname varchar(20); 源地址http://blog.sina.com.cn/s/blog_566be384010124ib.html
  • MySQL数据类型

    千次阅读 2012-11-06 14:33:37
    一、MySQL数据类型 主要包括以下五大类: 整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT 浮点数类型:FLOAT、DOUBLE、DECIMAL 字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM ...
  • MySQL 中的数据类型介绍

    万次阅读 多人点赞 2016-04-29 20:24:03
    要了解一个数据库,我们也必须了解其支持的数据类型。... MySQL支持所有标准的SQL数据类型,主要分3类: ·数值类型 ·字符串类型 ·时间日期类型 另一类是几何数据类型,用的不多,也没多介绍。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 635,924
精华内容 254,369
关键字:

mysql常见的数据类型

mysql 订阅