MySQL:数据类型介绍

数据类型介绍

一、整数类型(可以添加自增约束条件)

 数据类型

存储需要

有符号

无符号

tinyint

1个字节

-2^7~2^7-1

0~2^8

smallint

2个字节

-2^15~2^15-1

0~2^16

mediumint

3个字节

-2^23~2^23-1

0~2^24

int

4个字节

-2^31~2^31-1

0~2^32

bigint

8个字节

-2^63~2^63-1

0~2^64

可以根据占用字节数可以求出每一个数据类型的取值范围,

  • 例:TINYINT需要1个字节(8bits)来存储,那么TINYINT无符号号数的最大值为2^8-1,即255;有符号数的最大值为2^7-1,即127.
  • 例:year int(4),该声明指明,在year字段中的数据一般只显示4位数字的宽度。

注意:

  • 显示宽度和数据类型的取值范围无关。
  • 显示宽度只是指明mysql最大可能显示的字数个数,当数值的位数小于指定的宽度由空格填充;如果插入大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来

例:int(3)占用4个字节的存储空间,并且最大值不是999,而是int的最大值。

  • 整型的默认值,系统将添加不同的默认显示宽度。保证显示每一种数据类型可以取到取值范围内的所有值。

例: TINYINT有符号和无符号的取值范围分别为-128~127和0~125,由于负号占一个数字位,因此TINYINT默认的显示宽度为4.

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

类型名称

说明

存储需求

float

单精度浮点数

4个字节

double

双精度浮点数

8个字节

decimal

(M,D),DEC

压缩的‘严格’定点数

M+2个字节

注意:

(1)Decimal

decimal实际是以串存放的,decimal可能最大取值范围和double一样,但其有效的取值范围有M和D的值决定。

    M:称为精度,表示总共的位数

    D:称为标度,是表示小数的位数

    m变大,d不变,取值范围增大

(2)当用户指定的精度超出精度范围时,浮点数和定点数都会进行四舍五入处理。

(3)浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据类型;缺点会引起精度问题。所以在货币和科学数据等用定点数更合适。

(4)float和double在不指定精度时,默认按照实际精度;decimal如不指定精度时默认为(10,0)

(5)浮点数相对于定点数的优点是在长度一定时,浮点数能够表示更大的数据范围,缺点引起精度问题

(6)不要使用浮点数比较,容易造成精度缺失。

三、日期与时间类型(要加单引号)

类型名称

日期格式

日期范围

存储需求

Year

YYYY

1901~2155

1字节

Time

HH:MM:SS

-838:59:59~838:59:59

3字节

Date

YYYY-MM-DD

1000-01-01~9999-12-3

3字节

Datetime

YYYY-MM-DD HH:MM:SS

1000-01-01 00:00:00

~9999-12-31 23:59:59

8字节

Timestamp

YYYY-MM-DD HH:MM:SS

1970-01-01 00:00:01 UTC~2038-01-19 03:14:07 UTC

4字节

1、Year

a.以4位字符串或者4位数字表示year,范围为‘1901’~‘2155’。输入格式为‘yyyy’或者yyyy,例,输入‘2010’或2010,插入到数据库的值均为2010。

b.以2位字符串表示year,范围为‘00’~‘99’。‘00’~‘69’和‘70’~‘99’范围的值分别被转化为2000~2069和1970~1999范围的year值。‘0’与‘00’的作用相同。插入超过取值范围的值将被转化为2000.

c.以2位数字表示year,范围为1~99。1~69和70~99范围的值分别被转化为2001~2069和1970~1999范围的year值。0被转化为0000。插入超过取值范围的值将被转化为2000.?

2、Time

HH表示小时;MM表示分钟;SS表示秒;

Time类型不仅可以表示一天时间(必须小于24小时),还可以是某个事件过去的时间或两个事件之间的时间间隔(可以大于24小时,甚至是负)

a、DHH:MM:SS’D表示日,可以取0~34之间的值。在插入数据库时,D被转化为小时保存,格式为‘D*24+HH’。

b、HHMMSS’格式的、没有间隔符的字符串或者HHMMSS格式的数值,假定是有意义的时间。例:‘101112’被理解为‘10:11:12’,但‘109712’是不合法的(它有一个没有意义的分钟部分),存储时将变为00:00:00.

c、如果没有冒号,mysql解释值时,假定最右边的两位表示秒。例‘1112’表示00:11:12(11分12秒);‘12’或12解释为00:00:12。加冒号‘11:12’表示11:12:00。

3、Date

a、使用current_date或者now(),插入当前系统日期。

b、以‘YYYY-MM-DD’或者YYYYMMDD表示的日期,取值范围为‘1000-01-01’~‘9999-12-3’

c、以‘YY-MM-DD’或者YYMMDD表示的日期,‘00~69’转化为‘2000~2069’;‘70~99’转化为‘1970~1999’。

d、如果插入datatime或者timestamp格式数据,值的时间部分被删除。

4、Datetime

a、YYYYMMDDHH:MM:SS 或者‘YYYYMMDD HH:MM:SS’取值范围‘1000-01-01 00:00:00’~‘9999-12-323:59:59’

b、YY-MM-DDHH:MM:SS或者‘YY-MM-DD HH:MM:SS’年值如前面一样

c、YYYYMMDDHHMMSS或者‘YYYYMMDDHHMMSS’年值如前面一样

d.、如果插入data格式数据,值的时间部分为‘00:00:00’。

5、Timestamp

与Datetime像似

两者不同点:

Datetime:与时区无关   Timestamp:与时区有关

Timestamp:如果插入data格式数据,值的时间部分为‘00:00:00’。

四、字符串类型

1、介绍

字符串类型除了可以存储字符串数据之外,还可以存储声音和图片

2、注意:

Varchar、blob和text类型是变长类型,对于其存储需求取决于列值的实际长度,而不是取决于类型的最大可能尺寸类型

3、类型:

(1)Char和varchar

    char(n)    固定长度字符串(文本)    

    varchar(n)  可变长度字符串(文本)    

注意:   

  • n表示可存放的最大字符数(不区分中英文)
    • 在数据长度等于n时,char与varchar是一样的
    • 在数据长度小于n时,char的存储长度是n,不足部分补“空格”;varchar是数据的实际长度。但是,在把char类型数据从表里取出时,MySQL会自动把字符串末尾的空格全部去除。
    • 在数据长度大于n时,char和varchar都是“出错的”
  • 关于保存的字符串的长度n
    • char(n)          1<=n<=255字符(不管中英文)
    • varchar(n)     占用存储空间小于等于65532字节,n取决于字符集
    • 英文字符集,n代表字符数/字节数(1个字符占一个字节空间)0<n<=65532
    • 中文字符集
      • utf-8字符集,一个字符由3个字节表示,0<n<=21844
      • GBK,一个字符由2个字节表示,0<n<=32766

特点:    

  • char的优点是检索数据速度快
  • varchar的优点是存储数据节约空间

(2)text类型

Text类型保存非二进制字符串,如文章内容,评论。

(3)Enum类型

格式:

字段名 enum(‘值1’,‘值2’…)

说明:

  • Enum是一个字符串对象,其值为表创建时在列规定中枚举的一列值。
  • 在内部用整数表示,列表中每一个值都有一个索引编号。

五、Set类型

格式:

set(‘值1’,‘值2 ’…‘值n’)

注意:

  1. Set是一个字符串对象,可以有零或多个值,set列最多可以有64个成员,
  2. 其值为表创建时规定的一列值。
  3. 指定包括多个set成员的set值时,各成员之间用逗号(,)间隔开。
  4. 在插入set值有重复的值,将被自动删除重复的值。
  5. 如果值不正确,MySQL将自动忽略这些值,并发出警告。
  6. 当创建表时,set成员值尾部的空格将自动被删除。

与Enum的异同点:

  • 相同点:与Enum相似内部用整数表示,列表中每一个值都有一个索引编号。
  • 不同点:Enum类型字段只能从定义的列值中选择一个值插入,而set类型的列可从定义的列值中选择多个字符的联合。

六、二进制类型

类型名称

说明

存储需求

Bit(M)

位字段类型

大约(M+7)/8字节

Binary(M)

固定长度二进制字符串

M个字节

Varbinary(M)

可变长度二进制字符串

M+1个字节

Tinyblob(M)

非常小的blob

L+1个字节,在此L<2^8

Blob(M)

小blob

L+2个字节,在此L<2^16

MEDIUMBLOB(M)

中等大小的blob

L+3个字节,在此L<2^24

LONGBLOB(M)

非常大的blob

L+4个字节,在此L<2^32

M表示每个值的位数,范围为1~64.如果M被省略,默认为1.

1、BIT类型

  • 如果为bit(M)列分配的值小于M位,在值左边用0填充。例:bit(6)列分配一个值b’101’,其效果与分配b’000101’相同。
  • Bit类型保存位字段值,例如:以二进制的显示保存的数据13,13的二进制为1101,在这里需要位数至少为4位的bit类型,即可定义列类型为bit(4),大于二进制1111的数据是不能插入bit(4)类型的字段中。

2、Binary和varbinary类型

  • 格式:列名称 binary(M)或者varbinary(M)
  • 与char和varchar相似

(3)Blob类型

BLOB没有字符集,并且排序和比较基于列值字节的数值

猜你喜欢

转载自www.cnblogs.com/hahayixiao/p/10124755.html
今日推荐