MySQL数据库类型详解总结大全-有哪些以及取值范围

1.   MySQL数据类型

1.1. 数据类型(列类型)总览

 

 

可见,mysql中的数据类型,总体分3大类:

数字型:

时间型:

字符型:

其中,在sql语句中,数字型数据不需要单引号引起来,而时间型和字符型数据需要用单引号引起来。

1.2. 整型

整型数据类型包括:

tinyint            :微整型

smallint          :小整型

mediumint      :中整型

int                 :整型

bigint             :大整型

这些不同大小范围的整型信息如下表所示:

 

类型

所占空间

(字节)

带符号

无符号

最小值

最大值

最小值

最大值

tinyint

1

-128

127

0

255

smallint

2

-32768

32767

0

65535

mediumint

3

-8388608

8388607

0

16777215

int

4

-2147483648

2147483647

0

4294967295

bigint

8

-9223372036854775808

9223372036854775807

0

18446744073709551615

 

默认整数类型是带符号的,即可以有正负值,比如:

create  table  zhengxing1(num1  int, num2  tinyint);

此时,num1和num2中都可以存储负数(但都不能超出范围)

不带符号的整数类型设置形式如下:

create  table  zhengxing2(num1  int  unsigned, num2  tinyint  unsigned);

 

1.3. 小数型

小数类型分为浮点小数和定点小数。

1.3.1.  浮点小数

浮点小数是“不精确的小数”,包括float和double。

float:

占用4字节存储空间,可称为“单精度浮点数”,约7位有效数字。

double:

占用8字节存储空间,可称为“双精度浮点数”,约17位有效数字。

 

1.3.2.  定点小数

定点小数是“精确的小数”——它通过内部技巧,突破了“有些小数无法用二进制精确表示”的局限。

其设定方式通常是这样的: decimal(M, D);

其中M表示该小数的总的有效位数(最大65),D表示该小数的小数点后的位数。

 

演示:

定义三个字段分别为float、double和decimal类型,并都插入数字“123456789.123456789123456789”,显示结果。

 

数据类型选择示例:

 

 

1.4. 日期时间型

日期时间类型包括如下几种:

date类型:

表示日期,格式类似这样:'0000-00-00'

 

time类型:

表示时间,格式类似这样:'00:00:00'

 

datetime类型:

表示日期时间,格式类似这样:'0000-00-00 00:00:00'

 

timestamp类型:

表示“时间戳”,其实就是一个整数数字,该数字是从是“时间起点”到现在为止的“秒数”。

“时间起点”是:1970-1-1 0:0:0

timestamp类型的字段,无需插入数据,而是会自动取得当前的日期时间(表示当前时刻)。

而且,此类型字段会在数据被更新时,也同样自动取得当前的日期时间(表示修改的时刻)。

特别总结:它在insert或update某行数据的时候,能够自动获得当前时间。

 

year类型:

表示年份,格式为:'0000'

 

注意:

时间类型的字面值,通常使用单引号引起来

 

示例:

创建一个表,设定5个字段分别为上述类型,并插入相应的数据值后查看结果。

 

now()函数的使用:

 

更新数据,以对比datetime类型的数据和timestamp类型的数据的区别:

 

小细节:timestamp类型在一个表中只能用于一个字段!

1.5. 字符串型

字符串类型常用的包括:char, varchar, text, enum, set,分述如下:

1.5.1.  定长字符char和变长字符varchar

l  定长字符类型char:

适用于存储的字符长度为固定长度的字符,比如中国邮政编码,中国身份证号码,手机号码等。

设定形式:

字段名称 char(字符个数)

其特点是:

1,存储的字符长度固定,最长可设定为255个字符。

2,如果实际写入的字符不足设定长度,内部会自动用空格填充到设定的长度。

3,相对varchar类型,其存取速度更快。

l  变长字符类型varchar:

适用于存储字符长度经常不确定的字符,比如姓名,用户名,标题,内容,等大多数场合的字符。

设定形式:

字段名称 varchar(字符个数)

其特点是:

1,存储的字符长度是写入的实际长度,但不超过设定的长度。最长可设定为65532(字节)。

(1)      注:由于其最长的限制是字节数,因此存储中文和英文的实际字符个数是不同的;

(2)      英文:一个字符占一个字节;

(3)      中文(gbk编码):一个字符占2个字节;

(4)      中文(utf8编码):一个字符占3个字节;

2,如果实际写入的字符不足设定的长度,就按实际的长度存储。

3,相对于char字符串,其存取速度相对更慢。

示例:

定义一个表,演示char和varchar的使用和区别:

 

 

思考题:

一个表中有一个字段为c1,其类型为char(10),另有一个字段为c2,类型为varchar,问:

c2最多可以设置多长?

答:

1,一个表中的行也有一个“最大字节长度的限制”,一行最多存储65532字节。

2,则此时,c2最多可以设置65532-10 = 65522(长度设定)

3,如果c2中存储的全是英文字符,就可以存储65522个

4,如果存储中文:

       gbk:最多65522/2 = 32761个

       utf8:最多65522/3 = 21840个

 

1.5.2.  text长文本类型

适用于存储“较长的文本内容”,比如文章内容。最长可存储65535个字符。

如果还需要存储更长的文本,可以使用mediumtext(1600万左右)或longtext(40亿左右)。

设定形式:

字段名称   text

text类型的字段不能设置默认值。

text类型虽然是字符类型,但不能设置长度!!!

text类型的数据不存在行中。

 

 

1.5.3.  enum和set类型

enum类型和set类型都是用于存储“有给定值的可选字符”,比如类似表单中的单选,多选,下拉列表。

 

l  enum类型(单选类型/枚举类型):

enum类型通常用于存储表单中的“单选项”的值。

设定形式:

enum(‘选项值1’, ‘选项值2’, ‘选项值3’, ....)

这些选项值都对应了相应的“索引值”,类似索引数组的下标,但是从1开始的。

即这些选项的索引值分别为:1, 2, 3, 4, .....

enum类型最多可设定65535个选项。

示例:

create  table  tab1 (id  int,  edu(‘大学’, ‘中学’, ‘小学’, ‘其他’ )  );

insert  into  tab1 (id, edu) values (1, ‘大学’);

或:

insert  into  tab1 (id, edu) values (1, 2);           //表示中学

l  set类型(多选类型):

set类型通常用于存储表单中的“多选项”的值。

设定形式:

set(‘选项值1’, ‘选项值2’, ‘选项值3’, ....)

这些选项值都对应了相应的“索引值”,其索引值从1开始,并“依次翻倍”。

即这些选项的索引值分别为:1, 2, 4, 8, 16, .....  (其实就是2的n次方)

enum类型最多可设定64个选项值。

示例:

create  table  tab2 (aihao(‘篮球’, ‘排球’, ‘足球’, ‘中国足球’ )  ); #对应索引值为1,2,4,8

insert  into  tab2( aihao ) values ( ‘篮球’ );

或:

insert  into  tab2 ( aihao ) values ( ‘篮球,排球’ );

或:

insert  into  tab2 ( aihao ) values ( ‘篮球,足球,排球’ );

或:

insert  into  tab2 ( aihao ) values ( 2 );      //表示排球(2)

或:

insert  into  tab2 ( aihao ) values ( 3);              //表示“篮球,排球”(1+2)

或:

insert  into  tab2 ( aihao ) values ( 7);              //表示“篮球,排球,足球”(1+2+4)

基本示例:

 

使用索引值来插入数据:

 

 

 

<?php
    echo "本文笔记转载于word文档,并非原创!";    
?>

 

 

posted @ 2020-02-03 13:36  secsafe  阅读(3909)  评论(0编辑  收藏  举报