ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Mysql2:数据类型

2019-10-30 12:50:55  阅读:287  来源: 互联网

标签:Mysql2 SET 数据类型 存储 字符串 格式 类型 长度


Mysql支持多种数据类型,主要有数值类型、日期/时间类型、字符串类型。

1)数值数据类型:整数类型TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT

            浮点小数数据类型FLOAT、DOUBLE

         定点小数类型DECIMAL

2)日期/时间类型:YEAR、TIME、DATE、DATETIME、TIMESTAMP

3)字符串类型:CHAR、VARCHAR、BINARY、VARBINARY、TEXT、ENUM、SET等。字符串类型又分为文本字符串和二进制字符串。

 

整数类型  

  

 

  不同类型整数存储所需的字节数不同,根据占用字节数可以求出每一种数据类型的取值范围,例如TINYINT需要1个字节(8bits)存储,那么它的无符号的最大值为2**8 -1 即255;有符号最大值为 2**7 -1= 127.

  下表是不同数据类型的取值范围

        

 

  添加数据表时的数据类型int(11)中,11表示该数据类型指定的显示宽度,指定能够显示的数值中数字的个数。

 

  显示宽度和数据类型的取值范围无关。显示宽带只是知名Mysql最大可能显示的数字个数,数值的位数小于指定的宽度时会由空格填充;如果插入了大于显示宽度的值,只要该值不超过该类型的取值范围,数值依然可以插入,能够显示出来。

  定义表结构时,如果不指定显示宽度,则系统为每一种类型指定默认的宽度值。

  

 

   上实例可以看出,系统为不同数据类型指定不同的显示宽度。以 tinyint类型为例,tinyint类型有符号和无符号分别为-128~127和0~255,由于负号占了一个数字位,故默认显示宽度为4位。

 

浮点数和定点数

  Mysql中使用浮点数和定点数表示小数。

  浮点和定点类型都可以用(M,N)来表示,其中M表示精度,表示总共的位数;N表示标度,是表示小数的位数。

  

 

   

 

 

 

日期与时间类型

  

 

 YEAR:

  YEAR类型是一个单字节类型用于表示年,在存储时,只需要1个字节,可以使用各种格式指定YEAR值。

  1)以4位字符串或4位数字格式表示YEAR,范围1901~2155。输入格式为“YYYY”或YYYY。

   

 

  2)以2位字符串格式表示的YEAR,范围‘00’~‘99’。‘00’~‘ 69’ 被转换成2000~2069;‘ 70’~‘ 99’ 被转换为1970~1999年份范围。插入超过取值范围的值将被转换为2000.

   

  3)以2为数字表示的。范围1~99。1~69被转换为2001~2069;70~99范围被转换为1970~1999。0被转换为0000,而不是2000.

  

 

TIME

  TIME类型用于只需要时间信息的值,在存储时需要3个字节。格式为“ HH:MM:SS "

  TIME的取值范围是-838:59:59 ~  838:59:59。小时部分如此大是因为TIME类型不仅可以表示一天的时间,还可以某个事件过去的时间或两个事件之间的时间间隔。可以使用各种格式指定TIME值。

  1)‘ D HH:MM:SS ’格式的字符串。这里D表示日,可以取0~34之间的值,在插入数据库时,D被转换为小时保存,格式为D*24 + HH

  2)‘HHMMSS’格式的或者HHMMSS格式的数值。例如101211被理解成10:12:11.但是如果数值不合法例如‘109712’,此时分钟没有意义,则被理解为00:00:00

  备注:如果没有冒号,则最右边的两位表示秒,例如1112,mysql解释为00:11:12

    如果使用冒号则被看作当天的时间。例如‘11:12’被解释为11:12:00

  3)系统日期:CURRENT_TIME或者NOW()

   

 

 

DATA类型

  DATA类型用在仅需要日期值,没有时间部分,存储时需要3个字节。

  日期格式为:‘YYYY-MM-DD’

  1)以‘YYYY-MM-DD’或者‘YYYYMMDD’字符串格式表示日期,取值范围是‘1000-01-01’~~‘9999-12-31’

  2)以‘YY-MM-DD’或者‘YYMMDD’字符串格式表示日期。‘00’~‘ 69’ 被转换成2000~2069;‘ 70’~‘ 99’ 被转换为1970~1999年份范围

  3)以YY-MM-DD或者YYMMDD格式。

  4)使用系统日期:CURRENT_DATE()或者NOW()

 

DATATIME类型

  DATATIME类型用在需要同时包含日期和时间信息的值,存储时需要8个字节。

  1)以 ‘YYYY-MM-DD HH:MM:SS’或者 'YYYYMMDDHHMMSS' 字符串格式表示的值。

  2)以 ' YY-MM-DD HH:MM:SS ' 或者 'YYMMDDHHMMSS '字符串格式表示的日期。

  3)以YYYYMMDDHHMMSS 或者YYMMDDHHMMSS数字格式表示日期和时间。

 

TIMESTAMP

  TIMESTAMP的显示格式与DATATIME相同,显示宽度固定在19个字符,日期格式为 YYYY-MM-DDD HH:MM:SS,在存储时需要4个字节,。

  TIMESTAMP列的取值范围小于DATATIME的取值范围,为‘1970-01-01 00:00:01' UTC ~~’2038-01-01 03:14:07'UTC。其中UTC为世界标准时间,因此在插入数据时,要保证在合法的取值范围内。

  DATATIME在存储日期时,按实际输入的格式存储,即输入什么就存储什么,与时区无关。

  TIMESTAMP的值存储的是以UTC格式保存的,存储时对当前时区进行转换,检索时再转换回当前时区。即查询时,根据当前时区的不同,显示的时间值是不同的。

 

文本字符串类型

 

  字符串类型用来存储字符串数据,除了可以存储字符串外,还可以存储其他数据,如图片和声音的二进制数据。

  Mysql支持两类字符型数据:文本字符串和二进制字符串。

  

 

 

1)CHAR和VARCHAR类型

  CHAR(M)为固定长度的字符串,在定义时指定字符串列长。当保存时在右侧填充空格,以达到指定的长度。M表示列长度,M的范围是0~255个字符。

  VARCHAR(M)是长度可变的字符串,M表示最大列长度。M的范围是0~65635.

  VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定,而其实际占用的空间为字符串的实际长度加1.例如VARCHAR(50)定义了一个最大长度为50的字符串,如果插入的字符串只要10个字符,则实际存储的字符串为10个字符出和一个字符串结束字符。VARCHAR在值保存和检索时尾部的空格仍保留。

 

2)TEXT类型

  TEXT列保存非二进制字符串,如文章、评论等,当保存或查询TEXT列的值时,不删除尾部空格。TEXT类型分为4中,不同类型的存储空间和数据长度不同。

  TINYTEXT最大长度为255(2**8 - 1)字符的TEXT列

  TEXT最大长度为65535 (2**16 -1 )字符的TEXT列

  MEDIUMTEXT最大长度为16777215 (2**24 - 1)字符的TEXT列

  LONGTEXT最大长度为4294967295 (2**32 - 1)字符的TEXT列

 

3)ENUM类型

  ENUM是一个字符串对象,其值为表创建时在列规定中枚举的一列值。

   语法:

 

   实例:

  

 

 

4)SET类型

  SET类型是一个字符串对象,可以有零个或多个值,SET列最多可以有64个成员。

  语法:        

 

  与ENUM类型相同,SET在内部使用整数表示,列表中每一个值都有一个索引编号。当创建表时,SET成员的尾部空格会被自动删除。

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

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

 

二进制字符串类型

  

 

1)BIT类型

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

  b+0表示将二进制的结果转换为对应的数字的值,bin()函数将数字转换为二进制。

  

 

 

2)BINARY和VARBINARY类型

  BINARY和VARBINARY类型类似与CHAR和VARCHAR,不同的是它们包含二进制字节字符串。

  BINARY类型的长度是固定的,指定长度之后,不足最大长度的,将在右边填充‘\0'补齐达到指定长度。

  VARBINARY类型的长度是可变的,指定长度之后,其长度可以在0到最大值之间。例如:指定列数据类型为    VARBINARY(20),如果插入的值的长度只有10,则实际存储空间为10加1,即实际占用空间为字符串的实际长度加1.

 

3)BLOB类型

  

 

 如何选择数据类型

1.整数和浮点数

  如果不需要小数部分,则使用整数来保存数据;如果需要表示小数部分,则使用浮点数类型。对于浮点数据列,存入的数值会对该列定义的小数位进行四舍五入。例如,如果列的值的范围为1~9999,若使用整数,则 MEDIUMINT UNSIGNED是最好的类型:若需要存储小数,则使用 FLOAT类型。浮点类型包括 FLOAT和 DOUBLE类型。 DOUBLE类型精度比 FLOAT类型高,因此,如要求存储精度较高时,应选择 DOUBLE类型。

2.浮点数和定点数

  浮点数 FLOAT、 DOUBLE相对于定点数 DECIMAL的优势是:在长度一定的情况下,浮点数能表示更大的数据范围,但是由于浮点数容易产生误差,因此对精确度要求比较高时,建议使用 DECIMAL来存储。

   DECIMAL在 MySQL中是以字符串存储的,用于定义货币等对精确度要求较高的数据。在数据迁移中, float(M,D)是非标准SL定义,数据库迁移可能会出现问题,最好不要这样使用。另外两个浮点数进行减法和比较运算时也容易出问题,因此在进行计算的时候,一定要小心。如果进行数值比较,最好使用 DECIMAL类型。

3.日期与时间类型

  MySQL对于不同种类的日期和时间有很多的数据类型,比如YEAR和TME。如果只需 要记录年份,则使用YEAR类型即可;如果只记录时间,只需使用TME类型。如果同时需要记录日期和时间,则可以使用 TIMESTAMP或者 DATETIME类型。

  由于TIMESTAMP列的取值范围小于 DATETIME的取值范围,因此存储范围较大的日期最好使用DATETIME。TIMESTAMP也有一个 DATETIME不具备的属性。默认的情况下,当插入一条记录但并没有指定 TIMESTAMP这个列值时,,MySQL会把 TIMESTAMP列设为当前的时间。因此当需要插入记录同时插入当前时间时,使用 TIMESTAMP是方便的。另外 TIMESTAMP在空间上比 DATETIME更有效。

4.CHAR与VARCHAR

  CHAR是固定长度,所以它的处理速度比VARCHAR的速度块, 但缺点是浪费存储空间。所以对于存储不大,但在速度上有要求的可以使用CHAR类型。

 5.ENUM和SET

  ENUM只能取单值,它的数据列表是一个枚举集合。它的合法取值列表最多允许有65535 个成员。因此,在需要从多个值中选取一个时,可以使用ENUM。比如:性别字段适合定义为ENUM类型,每次只能从“男’或‘女’中取一个值。SET可取多值。它的合法取值列表最多允许有64个成员。空字符串也是一个合法的SET值。在需要取多个值的时候,适合使用SET类型,比如:要存储一个人兴趣爱好,最好使用SET类型。ENUM和SET的值是以字符串形式出现的,但在内部,,MySQL以数值的形式存储它们。

6.BLOB和TEXT

  BLOB是二进制字符串,TEXT是非二进制字符串,两者均可存放大容量的信息。BLOB 主要存储图片、音频信息等,而TEXT只能存储纯文本文件

 

标签:Mysql2,SET,数据类型,存储,字符串,格式,类型,长度
来源: https://www.cnblogs.com/juankai/p/11609580.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有