第3章 MySQL存储引擎和数据类型MySQL的数据类型概要课件_第1页
第3章 MySQL存储引擎和数据类型MySQL的数据类型概要课件_第2页
第3章 MySQL存储引擎和数据类型MySQL的数据类型概要课件_第3页
第3章 MySQL存储引擎和数据类型MySQL的数据类型概要课件_第4页
第3章 MySQL存储引擎和数据类型MySQL的数据类型概要课件_第5页
已阅读5页,还剩137页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章MySQL存储引擎和数据类型(2)MySQL的数据类型第3章MySQL存储引擎和数据类型(2)MySQL的数据类主要内容MySQL数据类型简介

数字类型字符串类型日期时间类型选择正确的数据类型主要内容MySQL数据类型简介1、MySQL的数据类型简介MySQL的数据类型是一种手段,通过这种手段可以描述一个表列包含什么类型的值,这又决定了MySQL怎样处理这些值。例如,数值既可用数字也可用字符串的数据类型来存放,但是根据存放这些值的类型,MySQL对它们的处理将会有些不同。1、MySQL的数据类型简介MySQL的数据类型是一种手段1.字符串“12345”保存方法2.数字12345保存方法不同数据类型的保存方法共计占用

5个

字节存储空间字符“1”编码00110001字符“2”编码00110010字符“3”编码00110011字符“4”编码00110100字符“5”编码00110101共计占用

2个

字节存储空间数字12345的二进制编码00110000001110011、MySQL的数据类型简介1.字符串“12345”保存方法2.数字12345保存方法不每种列类型都有几个特性如下:其中可以存放什么类型的值。值要占据多少空间,以及该值是否是定长的(所有值占相同数量的空间)或可变长的(所占空间量依赖于所存储的值)。该类型的值怎样比较和存储。此类型是否允许NULL值。此类型是否可以索引。1、MySQL的数据类型简介每种列类型都有几个特性如下:1、MySQL的数据类型简介数据保存的格式不同,读取这些数据时进行的操作当然也就不同,因此数据库在存储数据之前都必须要明确数据的格式,也就是数据的数据类型。如果不知道某一个数据存储时所使用的数据类型,就无法正确的读出该数据来,因为使用不同的数据格式去读去同一个数据时,得到的结果也是截然不同的。1、MySQL的数据类型简介数据保存的格式不同,读取这些数据时进行的操作当然也就不同,因2.数字类型数字类型用于存储数字,可分为整数类型和浮点数(小数)类型。如果仅从数学的角度上分析,整数和小数都可以统一为小数,整数只是小数位为零的小数,但在MySQL中这两数据类型的保存方式却有很大的不同。一般而言,能使用整数保存的数据,就尽量选择使用整数类型。比如,要保存商品的价格时,可能会因为一个笔记本的价格是3.20元而为这个数据选择浮点数类型,但更好的选择却是将3.20元变换成320分后以整数方式保存。2.数字类型数字类型用于存储数字,可分为整数类型和浮点数(MySQL支持科学表示法,由整数或浮点数后跟“e”或“E”、一个符号(“+”或“-”)和一个整数指数来表示。1.34E+12和43.27e-1都是合法的科学表示法表示的数。而1.34E12不是合法的,因为指数前的符号未给出。指数前的“e”也是一个合法的十六进制数字,因此有可能会弄错。数值前可放一个负号“-”以表示负值。2.数字类型MySQL支持科学表示法,由整数或浮点数后跟“e”或“E数字类型可以结合UNSIGNED及ZEROFILL符号使用,UNSIGNED表示无符号数字,ZEROFILL表示使用“0”作为填充符进行填充。2.数字类型数字类型可以结合UNSIGNED及ZEROFILL符号使用,2.1整数整数在MySQL中保存时,MySQL会将其转换成二进制编码的形式直接保存。整数可以直接以十六进制表示,方法为在整数对应的十六进制编码(“0”到“9”及“a”到“f”)前加上“0x”。例如,0x0a为十进制的10,而0xffff为十进制的65535。十六进制数字不区分大小写,但其前缀“0x”不能为“0X”。即0x0a和0x0A都是合法的,但0X0a和0X0A不是合法的。2.1整数整数在MySQL中保存时,MySQL会将其转换2.1整数类型名字节数取值范围无符号(unsigned)有符号(signed)TINYINT10┈28-1-27┈27-1SMALLINT20┈216-1-215┈215-1MEDIUMINT30┈224-1-223┈223-1INT40┈232-1-231┈231-1BIGINT80┈264-1-263┈263-12.1整数类型名字节数取值范围无符号(unsigned)2.1整数在指定整数类型时,可以采用“类型名[显示长度]”的写法,如int[3],其中“显示长度”用于指定数字在显示时的长度,“显示长度”对数据的大小范围没有影响。当数字的实际长度比显示长度要小时,MySQL显示该数字时会自动使用填充符补足指定的“显示长度”;当数字的实际长度比显示长度大时,MySQL会突破显示长度的限制而显示数字的实际值。2.1整数在指定整数类型时,可以采用“类型名[显示长度]2.1整数默认情况下MySQL会用空格作为填充符进行填充,但“显示长度”通常会与ZEROFILL属性连用,表示MySQL使用“0”作为填充符。我们应该尽量避免数字的实际长度超过其显示长度,出现这种情况时不仅仅是使表中的记录看起来不协调,还会在进行某些复杂的表联结操作时出错。2.1整数默认情况下MySQL会用空格作为填充符进行填充2.2浮点数

浮点数可以理解为我们通常所说的小数,MySQL提供三种浮点类型:FLOAT、DOUBLE和DECIMAL。浮点数类型的取值范围与整型不同,除了有最大值和最小值外,浮点数类型还有最小正数和最大负数,这两个值的绝对值相等,用于衡量浮点数的精度,这对于记录科学数据来说是非常重要的。2.2浮点数浮点数可以理解为我们通常所说的小数,MyS2.2浮点数

FLOAT型FLOAT类型有两种使用方法:FLOAT(有效位数,小数位数)FLOAT(二进制位数)。2.2浮点数FLOAT型2.2浮点数

FLOAT(有效位数,小数位数)此类型又称为单精度浮点数类型,占用4字节长度,取值范围是:-3.402823466E+38到3.402823466E+38,最小正数是1.175494351E-38,最大负数是-1.175494351E-38。以上列出的只是理论值,不同计算机的硬件可能会使这一范围有所不同。2.2浮点数FLOAT(有效位数,小数位数)2.2浮点数

其中,“有效位数”表示有效数字的最大位数;“小数位数”表示小数点后的最大位数。如果“有效位数”和“小数位数”都省略,其默认值会因硬件不同而有所不同,单精度浮点数可精确到小数点后第7位。FLOAT类型表示小数部分时,由于二进制的原因只能准确的表示1/2n(n不大于表示小数位的二进制位数),或它们的组合,因此在表示小数时会有不精确的现象。2.2浮点数其中,“有效位数”表示有效数字的最大位数;2.2浮点数

FLOAT(二进制位数)这是一个混合了FLOAT和DOUBLE两种类型的数据类型,其中“二进制位数”代表表示该浮点数所占用的二进制位数,这个参数唯一的作用就是使MySQL确定该使用FLOAT型还是DOUBLE型来作为实际的数据类型。2.2浮点数FLOAT(二进制位数)2.2浮点数

FLOAT(二进制位数)当“二进制位数”在0到24(包括24)之间时,这一数据类型等同于未指定“有效位数”和“小数位数”的FLOAT型。当“二进制位数”在25到53之间时,这一数据类型会被MySQL转换成未指定“有效位数”和“小数位数”的DOUBLE型。其取值范围也与相应的数据类型一致。2.2浮点数FLOAT(二进制位数)2.2浮点数

DOUBLE(有效位数,小数位数)

此类型又称双精度浮点数类型,占用8字节长度,取值范围是:-1.7976931348623157E+308到1.7976931348623157E+308,最大负数是:-2.2250738585072014E-308,最小正数是:2.2250738585072014E-308。以上列出的也只是理论值,不同计算机的硬件可能会使这一范围有所不同。2.2浮点数DOUBLE(有效位数,小数位数)2.2浮点数

声明DOUBLE类型时可使用“DOUBLE(有效位数,小数位数)”的写法。其中,“有效位数”表示有效数字的最大位数;“小数位数”表示小数点后的最大位数。双精度浮点数可精确到小数点后第15位。2.2浮点数声明DOUBLE类型时可使用“DOUBLE2.2浮点数

DECIMAL(有效位数,小数位数)此类型用于保存对精确度要求较高的数值。在MySQL5.1以前,DECIMAL类型在保存小数时,使用的不是二进制保存法,而是使用的类似字符串的保存方法,对每一位小数位单独保存;在MySQL5.1中,DECIMAL类型使用的是二进制保存法。2.2浮点数DECIMAL(有效位数,小数位数)2.2浮点数

声明时可使用“DECIMAL(有效位数,小数位数)”的写法。其中,“有效位数”表示有效数字的最大位数;“小数位数”表示小数点后的最大位数。如果使用DECIMAL(有效位数)的写法,而不指明“小数位数”,则相当于DECIMAL(有效位数,0)的写法,此时不保存小数部分。如果使用DECIMAL的写法,既不指明“有效位数”,也不指定“小数位数”,则等同于DECIMAL(10,0)的写法。2.2浮点数声明时可使用“DECIMAL(有效位数,2.2浮点数

DECIMAL类型的最大有效位数是65,最大小数位数是30,其实际的取值范围由声明时指定的有效位数和小数位数而定,如DECIMAL(5,2)的取值范围是-999.99至999.99。如果在插入数值时,小数位数超过了指定的“小数位数”,MySQL会将该值的小数位数转换成指定的小数位数。2.2浮点数DECIMAL类型的最大有效位数是65,最2.3位类型位类型可会为BIT型和BOOL型。BIT[位数]

此类型用于声明一个指定位数的数据,位数的取值范围是1到64,默认值是1。此类型所占用的字节数由“位数”决定,每满8位即需一个新的字节,其长度的计算方法为“(位数+7)/8”,如有小数则进一。如BIT[25]占用4个字节,而BIT[26]则占用5个字节。2.3位类型位类型可会为BIT型和BOOL型。2.3位类型此数据类型用于存储基于位的数值,指定位类型的值时,可以采用b‘二进制值’的写法。如,b'111'代表7,b'10000000'代表128。如果所插入的值的位数比指定的位数少时,MySQL会在值的左边用0填充,如将值b’111’插入到BIT[8]时,等同于插入值b’00000111’。2.3位类型此数据类型用于存储基于位的数值,指定位类型2.3位类型bool型bool型数据用于存储逻辑值,它只有两种状态,即“TRUE”和“FALSE”,或“1”和“0”。此类型等价于TINYINT(1)类型。其值为0时表示“FALSE”,所有非0值都表示“TRUE”。2.3位类型bool型3.字符串类型字符串类型包括以下类型:CHARVARCHARBINARYVARBINARYBLOBTEXTENUMSET3.字符串类型字符串类型包括以下类型:字符串中可使用几个转义序列,它们用来表示特殊的字符。每个序列以一个反斜杠(“\”)开始,指出临时不同于通常的字符解释。注意NUL字节与NULL值不同;NUL为一个零值字节,而NULL为没有值。3.字符串类型字符串中可使用几个转义序列,它们用来表示特殊的字符。每个序列3.字符串类型转义字符含义\0NUL(ASCII0)\’单引号\”双引号\b退格\n新行\r回车\t

制表符\\反斜杠3.字符串类型转义字符含义\0NUL(ASCII03.字符串类型要在串中包括一个引号,可有如下三种选择:如果串是用相同的引号括起来的,那么在串中需要引号的地方双写引号即可。如果串是用另外的引号括起来的,则不需要双写相应引号。用反斜杠方式表示,这种方法不去管用来将串括起的是单引号还是双引号。3.字符串类型要在串中包括一个引号,可有如下三种选择:3.1CHAR和VARCHAR这两个类型都用于保存小型字符串,只是MySQL保存它们的方法不同。CHAR[字符串长度]CHAR[字符串长度]用于声明一个定长类型的列,其中“字符串长度”用于限制可插入的字符串的最大长度,如CHAR[100]最多只能保存100个字符。“字符串长度”的设置范围为0到255。3.1CHAR和VARCHAR这两个类型都用于保存小型字3.1CHAR和VARCHARCHAR类型的列,无论插入的字符数量是多少,最终都会被MySQL处理成指定字符串长度的列。当插入的字符串长度小于指定的字符串长度时,MySQL会在字符串尾部以空格进行填充。3.1CHAR和VARCHARCHAR类型的列,无论插入3.1CHAR和VARCHARVARCHAR[字符串长度]VARCHAR[字符串长度]用于声明一个变长类型的列,其中“字符串长度”也用于限制插入字符串的最大长度,“字符串长度”的设置范围为0到65535。(由于MySQL规定一条记录的所有列的长度之和不能超过65535个字节,受此限制一列的最大长度实际只能到65532字节。)3.1CHAR和VARCHARVARCHAR[字符串长度3.1CHAR和VARCHAR与CHAR类型不同的是,VARCHAR类型在保存数据时使用的是“按需分配”存储空间的策略,它在保存数据的同时记录下该字符串的实际长度,因此所占用的存储空间大多数情况下是小于指定的“字符串长度”的。如果插入的字符串的长度超过了指定的字符串长度,MySQL会截断该字符串。当被截掉的字符串不是空格时,MySQL会进行警告提示。如果MySQL工作在“strict”模式,将不允许截掉空格以外的字符,否则会产生运行错误,而不仅仅是一个警告提示。3.1CHAR和VARCHAR与CHAR类型不同的是,V3.1CHAR和VARCHAR使用VARCHAR类型是要注意的一个问题是,VARCHAR在保存字符串时,会自动去除字符串结束处的空格,如果要进行字符串的比较,MySQL也会将仅有尾部空格不同的字符串认为是相同的字符串。这一点与标准SQL的处理方法不同。3.1CHAR和VARCHAR使用VARCHAR类型是要3.2BINARY和VARBINARYBINARY和VARBINARY与CHAR和VARCHAR类型很相似,它们主要用存储二进制数据,而不是普通的字符串。这两种数据类型没有对应的字符集,对它们的排序或比较也都只是基于二进制值的比较,而不是字符集的比较。BINARY和VARBINARY的最大长度与CHAR和VARCHAR类型一样,唯一的区别是BINARY和VARBINARY类型的最大长度是指的字节数,而CHAR和VARCHAR类型的最大长度则是指的字符数。3.2BINARY和VARBINARYBINARY和V3.2BINARY和VARBINARYMySQL在存储BINARY类型时,会在数据的尾部追加0x00(数字0)以确保长度为指定的长度,但在执行SELECT语句会不会主动删除掉尾部的0x00。同时,尾部的0x00也会参与比较和排序,甚至会影响到DISTINCT关键字。另外,0x00与空格也不相等,0x00<空格。3.2BINARY和VARBINARYMySQL在存储3.3BLOB和TEXT使用BLOB和TEXT保存数据时,不会发生数据的变化。BLOBBLOB用于保存大型二进制数据,MySQL中共有四种BLOB型的数据类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。3.3BLOB和TEXT使用BLOB和TEXT保存数据3.3BLOB和TEXT这四种类型的区别只是能够保存的数据的最大长度不同。对TEXT类型的数据进行比较时,MySQL会忽略数据尾部的空格,如果两个字符串仅仅是尾部的空格数量不一致,会被判断为相等的字符串。3.3BLOB和TEXT这四种类型的区别只是能够保存的3.3BLOB和TEXTTEXTTEXT类型用于保存大型字符串。与BLOB类型一样,TEXT类型也分为TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT四种类型,各类型能够存储的最大字节数与对应的BLOB类型一致。3.3BLOB和TEXTTEXT3.3BLOB和TEXTBLOB类型用于存储二进制类型的数据,TEXT类型用于存储标准字符串数据。BOLB类型的数据在进行比较时,会用二进制数据进行比较,TEXT类型的数据都有相对应的字符集,在进行比较时也是基于字符集进行比较当插入的数据长度超过指定的长度时,MySQL会截断数据,同时发出警告信息。如果MySQL工作在“STRICT”模式,则会产生错误。3.3BLOB和TEXTBLOB类型用于存储二进制类型3.4枚举ENUMENUM枚举类型的数据可以理解成只能取指定的几个值的字符串,其可以取的值在建表时就在列定义中列出了清单。值列表中的数据必须是用引号引出来的字符串,而不能是一个运算表达式或字符串变量,换句话说,不能使用用户定义的变量作为枚举类型的值列表中的值。3.4枚举ENUMENUM枚举类型的数据可以理解成只能3.4枚举ENUM在以下情况下,值列表中的值可以是空字符串(’’)或空值(NULL):1.如果将一个无效值(不在值列表中的字符串)插入一个ENUM类型的列时,MySQL会将空字符串作为一个特殊的错误值插入到该列中。事实上,这个空字符串会被保存成0x00,只是显示时显示会空字符串,这个问题我们等一会儿再详细讨论。如果MySQL是工作在“STRICT”模式,插入无效值则会产生错误。3.4枚举ENUM在以下情况下,值列表中的值可以是空字3.4枚举ENUM2.如果一个ENUM类型的列被设置成允许NULL值,则可以将NULL值直接赋值给该类型的列,而且MySQL会将该列的默认值也设置为NULL。如果一个ENUM类型的列被声明为NOTNULL,该列的默认值将是该ENUM类型的值列表中的第一个成员。3.4枚举ENUM2.如果一个ENUM类型的列被设置成3.4枚举ENUMMySQL在保存ENUM类型的数据值,并不会保存值列表中的字符串值,而是为值列表中的每个字符串值分配一个编号,这个编号称为索引值。索引值的设置方法如下:1.从1开始依次为值列表中的每一个值设置索引值,如值列表内容为(’red’,’blue’,’white’,’black’),则各值对应的索引值为(1,2,3,4)。2.代表错误的空字符串的索引值为0,因此可以通过判断列值是否为0还找出数据有误的记录,代码如下:mysql>SELECT*FROM表名WHEREenum列=0;3.NULL值的索引为NULL。3.4枚举ENUMMySQL在保存ENUM类型的数据值3.4枚举ENUM可以将ENUM类型的数据直接作为数字使用,该数据所对应的数字即是其索引值。例如,可以用如下语句将ENUM列显示为其索引值:mysql>SELECTenum列+0FROM表名;3.4枚举ENUM可以将ENUM类型的数据直接作为数字3.4枚举ENUM如果将一个数字赋值给ENUM类型的列,该数字会被处理成该ENUM类型的索引值,实际保存的值将是该索引值对应的枚举成员。虽然这种做法是可行的,但本书不建议使用这种方法来定义一个ENUM列,因为这很容易引起混淆,并且完全丧失了ENUM类型的优势。3.4枚举ENUM如果将一个数字赋值给ENUM类型的列3.4枚举ENUMMySQL在对ENUM类型的列进行排序时,会按照其索引值进行排序。例如,对于ENUM('a','b'),'a'排在'b'前面,但对于ENUM('b','a'),'b'排在'a'前面。空字符串排在非空字符串前面,并且NULL值排在所有其它枚举值前面。要想防止意想不到的结果,按字母顺序规定ENUM列。还可以使用GROUPBYCAST(ENUM列ASCHAR)来确保按照词汇对列进行排序而不是用索引值。3.4枚举ENUMMySQL在对ENUM类型的列进行排3.4枚举ENUM如果想查看一个ENUM列的所有可能的值,可以使用如下语句:SHOWCOLUMNSFROM表名LIKEenum列3.4枚举ENUM如果想查看一个ENUM列的所有可能的3.5多值SETSET类型也对应一个值列表,但与ENUM不同的是,SET类型允许被赋值为这些值中若干个值的组合。指定包括多个SET成员的SET列值时各成员之间用逗号(‘,’)隔开,这就要求SET成员值本身不能包含逗号。3.5多值SETSET类型也对应一个值列表,但与ENUM3.5多值SETSET最多可以有64个不同的成员。当创建表时,SET成员值的尾部空格将自动被删除。当读取SET类型的列时,MySQL将会使用SET类型定义时所使用的大小写来显示。同ENUM类型一样,也可以为SET列分配字符集和校对规则。3.5多值SETSET最多可以有64个不同的成员。3.5多值SETMySQL保存SET类型的值时,并不会保存相应的成员字符串,而是采用二进制的保存方法。二进制数字的每一位对应于SET值的一项,其中低阶位对应第1个SET成员。如果将一个SET类型的值作为数字使用时,该值的位设置对应组成列值的SET成员。如下代码可以读取出SET类型的列所对应索引值:mysql>SELECTset列+0FROM表名;3.5多值SETMySQL保存SET类型的值时,并不会保4.日期时间类型日期时间类型包括为DATETIME、DATE、TIMESTAMP、TIME和YEAR等类型。每个类型都有不同的有效值范围和“零”值,当指定的时间值无法保存到对应的类型中时,MySQL将会把“零”值保存在该类型中。TIMESTAMP是比较特殊的类型,它有专有的自动更新特性。4.日期时间类型日期时间类型包括为DATETIME、D4.日期时间类型一般情况下,如果试图插入一个不合法的日期,MySQL将给出警告或错误。但是如果打开了“ALLOW_INVALID_DATES”SQL模式,则MySQL会允许接受一些不合法的日期,如'1999-11-31'。在“ALLOW_INVALID_DATES”SQL模式下,MySQL只验证月范围为从0到12,日范围为从0到31,注意月和日都可以为零。4.日期时间类型一般情况下,如果试图插入一个不合法的日4.日期时间类型MySQL还允许将'0000-00-00'保存为“伪日期”(如果不找启用NO_ZERO_DATESQL模式)。这在某些情况下比使用NULL值更方便,而且数据和索引占用的空间会更小。4.日期时间类型MySQL还允许将'0000-00-04.日期时间类型使用时间日期类型时,应该注意以下几点:1.包含两位年值的日期会令人模糊,因为无法确定其世纪。MySQL使用以下规则解释两位年值:70-99范围的年值转换为1970-199900-69范围的年值转换为2000-20692.日期总是以年-月-日顺序(如,'98-09-04'),而不是月-日-年或日-月-年顺序。3.如果需要,MySQL可以将日期或时间类型的值转换为数字,反之亦然。4.日期时间类型使用时间日期类型时,应该注意以下几点:4.日期时间类型4.当MySQL遇到一个日期或时间类型的超出范围或对于该类型不合法的值时,它将该值转换为该类的“零”值。但是超出范围的TIME值会被裁剪到TIME范围的相应端点。5.“零”值是特殊值,可以使用值'0'或0来将一个时间日期类型的列设置成“零”值。4.日期时间类型4.当MySQL遇到一个日期或时间类4.1DATATIME当需要同时包含日期和时间信息的值时应该使用DATETIME类型。MySQL以'YYYY-MM-DDHH:MM:SS'格式检索和显示DATETIME值。支持的范围为'1000-01-0100:00:00'到'9999-12-3123:59:59'。4.1DATATIME当需要同时包含日期和时间信息的值时4.1DATATIME可以使用任何常见格式指定DATETIME值:'YYYY-MM-DDHH:MM:SS'或'YY-MM-DDHH:MM:SS'格式的字符串。'YYYYMMDDHHMMSS'或'YYMMDDHHMMSS'格式的没有间割符的字符串,如果字符串对于日期类型是有意义的,也允许使用。YYYYMMDDHHMMSS或YYMMDDHHMMSS格式的数字,如果数字对于日期类型是有意义的,也允许使用。4.1DATATIME可以使用任何常见格式指定DATET4.1DATATIME以上写法中,无效DATETIME值被转换为相应类型的“零”值('0000-00-0000:00:00'、'0000-00-00'或者00000000000000)。如果字符串中有分隔符,则月和日只有一位时可以只写一位,但如果没有分隔符,就必须写成两位,其中十位数字为0。4.1DATATIME以上写法中,无效DATETIME值4.2DATE当只需要日期值而不需要时间部分时应使用DATE类型。MySQL用'YYYY-MM-DD'格式检索和显示DATE值。支持的范围是'1000-01-01'到'9999-12-31'。4.2DATE当只需要日期值而不需要时间部分时应使用DA4.3TIMESTAMPTIMESTAMP列用于INSERT或UPDATE操作时记录日期和时间。如果人为的给它分配一个值,表中的第一个TIMESTAMP列自动设置为最近操作的日期和时间。也可以通过分配一个NULL值,将TIMESTAMP列设置为当前的日期和时间。TIMESTAMP值返回后显示为'YYYY-MM-DDHH:MM:SS'格式的字符串,显示宽度固定为19个字符。如果想要获得数字值,可以在TIMESTAMP列添加+0。4.3TIMESTAMPTIMESTAMP列用于INSE4.3TIMESTAMP初始化和更新TIMESTAMP列的方法如下:1.可以将当前的时间戳指定为默认值或自动更新的值,但二者不能同时选择。2.可以指定任意一个TIMESTAMP列为自动初始化或更新为当前的日期和时间,而不仅限于第1个TIMESTAMP列。4.3TIMESTAMP初始化和更新TIMESTAMP列4.4TIMETIME类型用于保存精确到秒的时间,范围是'-838:59:59'到'838:59:59'。MySQL以'HH:MM:SS'格式显示TIME值,但允许使用字符串或数字为TIME列分配值。小时部分之所以没有限制为小于24小时,是因为它还可用于记录两个时刻之间的时间间隔,这个间隔可能会超过一天的时间。4.4TIMETIME类型用于保存精确到秒的时间,范围是4.4TIME为TIME赋值的方法可参考DATATIME中的相关内容,如果要保存的值超出TIME范围会被裁为范围最接近的端点。例如,'-850:00:00'和'850:00:00'被转换为'-838:59:59'和'838:59:59'。无效TIME值被转换为'00:00:00'。请注意由于'00:00:00'本身是一个合法TIME值,因此不能确定'00:00:00'一定是不合法的值。4.4TIME为TIME赋值的方法可参考DATATIME4.5YEAR[(2|4)]YEAR类型是一个单字节类型用于表示两位或四位格式的年。默认是四位格式。在四位格式中,允许的值是1901到2155,也可以是0000。在两位格式中,允许的值是70到69,表示从1970年到2069年。MySQL以YYYY格式显示YEAR值,但允许使用字符串或数字为YEAR列分配值。4.5YEAR[(2|4)]YEAR类型是一个单字节类型4.5YEAR[(2|4)]可以指定各种格式的YEAR值:1.四位字符串,范围为'1901'到'2155'。2.四位数字,范围为1901到2155。3.两位字符串,范围为'00'到'99'。'00'到'69'和'70'到'99'范围的值被转换为2000到2069和1970到1999范围的YEAR值。4.两位整数,范围为1到99。4.5YEAR[(2|4)]可以指定各种格式的YEAR值5.选择正确的数据类型通常我们应该选择尽可能小的数据类型,这样可以节省空间,并且可以更快地进行访问和更新。但应该注意需要保存的数据的范围,如果选择的类型太小,数据可能会在插入时被截断或产生错误,所以一定要选择一个覆盖所有可能性的数据类型为了优化存储,在任何情况下均应使用最精确的类型。例如,如果列的值的范围为从1到99999,若使用整数,则MEDIUMINTUNSIGNED是好的类型。在所有可以表示该列值的类型中,该类型使用的存储最少。5.选择正确的数据类型通常我们应该选择尽可能小的数据类5.选择正确的数据类型应当使用精度为65位十进制数(基于10)对DECIMAL列进行所有基本计算(+、-、*、/)。使用双精度操作对DECIMAL值进行计算。如果准确度不是太重要或如果速度为最高优先级,DOUBLE类型即足够了。为了达到高精度,可以转换到保存在BIGINT中的定点类型。这样可以用64位整数进行所有计算,根据需要将结果转换回浮点值。5.选择正确的数据类型应当使用精度为65位十进制数(基本章小结本章介绍了MySQL中可以使用的数据类型,各种数据库系统中使用的数据类型都大体相似,但也总有不同之处,了解这些区别是学习MySQL的一项重要任务。本章小结本章介绍了MySQL中可以使用的数据类型,各种数据库第3章MySQL存储引擎和数据类型(2)MySQL的数据类型第3章MySQL存储引擎和数据类型(2)MySQL的数据类主要内容MySQL数据类型简介

数字类型字符串类型日期时间类型选择正确的数据类型主要内容MySQL数据类型简介1、MySQL的数据类型简介MySQL的数据类型是一种手段,通过这种手段可以描述一个表列包含什么类型的值,这又决定了MySQL怎样处理这些值。例如,数值既可用数字也可用字符串的数据类型来存放,但是根据存放这些值的类型,MySQL对它们的处理将会有些不同。1、MySQL的数据类型简介MySQL的数据类型是一种手段1.字符串“12345”保存方法2.数字12345保存方法不同数据类型的保存方法共计占用

5个

字节存储空间字符“1”编码00110001字符“2”编码00110010字符“3”编码00110011字符“4”编码00110100字符“5”编码00110101共计占用

2个

字节存储空间数字12345的二进制编码00110000001110011、MySQL的数据类型简介1.字符串“12345”保存方法2.数字12345保存方法不每种列类型都有几个特性如下:其中可以存放什么类型的值。值要占据多少空间,以及该值是否是定长的(所有值占相同数量的空间)或可变长的(所占空间量依赖于所存储的值)。该类型的值怎样比较和存储。此类型是否允许NULL值。此类型是否可以索引。1、MySQL的数据类型简介每种列类型都有几个特性如下:1、MySQL的数据类型简介数据保存的格式不同,读取这些数据时进行的操作当然也就不同,因此数据库在存储数据之前都必须要明确数据的格式,也就是数据的数据类型。如果不知道某一个数据存储时所使用的数据类型,就无法正确的读出该数据来,因为使用不同的数据格式去读去同一个数据时,得到的结果也是截然不同的。1、MySQL的数据类型简介数据保存的格式不同,读取这些数据时进行的操作当然也就不同,因2.数字类型数字类型用于存储数字,可分为整数类型和浮点数(小数)类型。如果仅从数学的角度上分析,整数和小数都可以统一为小数,整数只是小数位为零的小数,但在MySQL中这两数据类型的保存方式却有很大的不同。一般而言,能使用整数保存的数据,就尽量选择使用整数类型。比如,要保存商品的价格时,可能会因为一个笔记本的价格是3.20元而为这个数据选择浮点数类型,但更好的选择却是将3.20元变换成320分后以整数方式保存。2.数字类型数字类型用于存储数字,可分为整数类型和浮点数(MySQL支持科学表示法,由整数或浮点数后跟“e”或“E”、一个符号(“+”或“-”)和一个整数指数来表示。1.34E+12和43.27e-1都是合法的科学表示法表示的数。而1.34E12不是合法的,因为指数前的符号未给出。指数前的“e”也是一个合法的十六进制数字,因此有可能会弄错。数值前可放一个负号“-”以表示负值。2.数字类型MySQL支持科学表示法,由整数或浮点数后跟“e”或“E数字类型可以结合UNSIGNED及ZEROFILL符号使用,UNSIGNED表示无符号数字,ZEROFILL表示使用“0”作为填充符进行填充。2.数字类型数字类型可以结合UNSIGNED及ZEROFILL符号使用,2.1整数整数在MySQL中保存时,MySQL会将其转换成二进制编码的形式直接保存。整数可以直接以十六进制表示,方法为在整数对应的十六进制编码(“0”到“9”及“a”到“f”)前加上“0x”。例如,0x0a为十进制的10,而0xffff为十进制的65535。十六进制数字不区分大小写,但其前缀“0x”不能为“0X”。即0x0a和0x0A都是合法的,但0X0a和0X0A不是合法的。2.1整数整数在MySQL中保存时,MySQL会将其转换2.1整数类型名字节数取值范围无符号(unsigned)有符号(signed)TINYINT10┈28-1-27┈27-1SMALLINT20┈216-1-215┈215-1MEDIUMINT30┈224-1-223┈223-1INT40┈232-1-231┈231-1BIGINT80┈264-1-263┈263-12.1整数类型名字节数取值范围无符号(unsigned)2.1整数在指定整数类型时,可以采用“类型名[显示长度]”的写法,如int[3],其中“显示长度”用于指定数字在显示时的长度,“显示长度”对数据的大小范围没有影响。当数字的实际长度比显示长度要小时,MySQL显示该数字时会自动使用填充符补足指定的“显示长度”;当数字的实际长度比显示长度大时,MySQL会突破显示长度的限制而显示数字的实际值。2.1整数在指定整数类型时,可以采用“类型名[显示长度]2.1整数默认情况下MySQL会用空格作为填充符进行填充,但“显示长度”通常会与ZEROFILL属性连用,表示MySQL使用“0”作为填充符。我们应该尽量避免数字的实际长度超过其显示长度,出现这种情况时不仅仅是使表中的记录看起来不协调,还会在进行某些复杂的表联结操作时出错。2.1整数默认情况下MySQL会用空格作为填充符进行填充2.2浮点数

浮点数可以理解为我们通常所说的小数,MySQL提供三种浮点类型:FLOAT、DOUBLE和DECIMAL。浮点数类型的取值范围与整型不同,除了有最大值和最小值外,浮点数类型还有最小正数和最大负数,这两个值的绝对值相等,用于衡量浮点数的精度,这对于记录科学数据来说是非常重要的。2.2浮点数浮点数可以理解为我们通常所说的小数,MyS2.2浮点数

FLOAT型FLOAT类型有两种使用方法:FLOAT(有效位数,小数位数)FLOAT(二进制位数)。2.2浮点数FLOAT型2.2浮点数

FLOAT(有效位数,小数位数)此类型又称为单精度浮点数类型,占用4字节长度,取值范围是:-3.402823466E+38到3.402823466E+38,最小正数是1.175494351E-38,最大负数是-1.175494351E-38。以上列出的只是理论值,不同计算机的硬件可能会使这一范围有所不同。2.2浮点数FLOAT(有效位数,小数位数)2.2浮点数

其中,“有效位数”表示有效数字的最大位数;“小数位数”表示小数点后的最大位数。如果“有效位数”和“小数位数”都省略,其默认值会因硬件不同而有所不同,单精度浮点数可精确到小数点后第7位。FLOAT类型表示小数部分时,由于二进制的原因只能准确的表示1/2n(n不大于表示小数位的二进制位数),或它们的组合,因此在表示小数时会有不精确的现象。2.2浮点数其中,“有效位数”表示有效数字的最大位数;2.2浮点数

FLOAT(二进制位数)这是一个混合了FLOAT和DOUBLE两种类型的数据类型,其中“二进制位数”代表表示该浮点数所占用的二进制位数,这个参数唯一的作用就是使MySQL确定该使用FLOAT型还是DOUBLE型来作为实际的数据类型。2.2浮点数FLOAT(二进制位数)2.2浮点数

FLOAT(二进制位数)当“二进制位数”在0到24(包括24)之间时,这一数据类型等同于未指定“有效位数”和“小数位数”的FLOAT型。当“二进制位数”在25到53之间时,这一数据类型会被MySQL转换成未指定“有效位数”和“小数位数”的DOUBLE型。其取值范围也与相应的数据类型一致。2.2浮点数FLOAT(二进制位数)2.2浮点数

DOUBLE(有效位数,小数位数)

此类型又称双精度浮点数类型,占用8字节长度,取值范围是:-1.7976931348623157E+308到1.7976931348623157E+308,最大负数是:-2.2250738585072014E-308,最小正数是:2.2250738585072014E-308。以上列出的也只是理论值,不同计算机的硬件可能会使这一范围有所不同。2.2浮点数DOUBLE(有效位数,小数位数)2.2浮点数

声明DOUBLE类型时可使用“DOUBLE(有效位数,小数位数)”的写法。其中,“有效位数”表示有效数字的最大位数;“小数位数”表示小数点后的最大位数。双精度浮点数可精确到小数点后第15位。2.2浮点数声明DOUBLE类型时可使用“DOUBLE2.2浮点数

DECIMAL(有效位数,小数位数)此类型用于保存对精确度要求较高的数值。在MySQL5.1以前,DECIMAL类型在保存小数时,使用的不是二进制保存法,而是使用的类似字符串的保存方法,对每一位小数位单独保存;在MySQL5.1中,DECIMAL类型使用的是二进制保存法。2.2浮点数DECIMAL(有效位数,小数位数)2.2浮点数

声明时可使用“DECIMAL(有效位数,小数位数)”的写法。其中,“有效位数”表示有效数字的最大位数;“小数位数”表示小数点后的最大位数。如果使用DECIMAL(有效位数)的写法,而不指明“小数位数”,则相当于DECIMAL(有效位数,0)的写法,此时不保存小数部分。如果使用DECIMAL的写法,既不指明“有效位数”,也不指定“小数位数”,则等同于DECIMAL(10,0)的写法。2.2浮点数声明时可使用“DECIMAL(有效位数,2.2浮点数

DECIMAL类型的最大有效位数是65,最大小数位数是30,其实际的取值范围由声明时指定的有效位数和小数位数而定,如DECIMAL(5,2)的取值范围是-999.99至999.99。如果在插入数值时,小数位数超过了指定的“小数位数”,MySQL会将该值的小数位数转换成指定的小数位数。2.2浮点数DECIMAL类型的最大有效位数是65,最2.3位类型位类型可会为BIT型和BOOL型。BIT[位数]

此类型用于声明一个指定位数的数据,位数的取值范围是1到64,默认值是1。此类型所占用的字节数由“位数”决定,每满8位即需一个新的字节,其长度的计算方法为“(位数+7)/8”,如有小数则进一。如BIT[25]占用4个字节,而BIT[26]则占用5个字节。2.3位类型位类型可会为BIT型和BOOL型。2.3位类型此数据类型用于存储基于位的数值,指定位类型的值时,可以采用b‘二进制值’的写法。如,b'111'代表7,b'10000000'代表128。如果所插入的值的位数比指定的位数少时,MySQL会在值的左边用0填充,如将值b’111’插入到BIT[8]时,等同于插入值b’00000111’。2.3位类型此数据类型用于存储基于位的数值,指定位类型2.3位类型bool型bool型数据用于存储逻辑值,它只有两种状态,即“TRUE”和“FALSE”,或“1”和“0”。此类型等价于TINYINT(1)类型。其值为0时表示“FALSE”,所有非0值都表示“TRUE”。2.3位类型bool型3.字符串类型字符串类型包括以下类型:CHARVARCHARBINARYVARBINARYBLOBTEXTENUMSET3.字符串类型字符串类型包括以下类型:字符串中可使用几个转义序列,它们用来表示特殊的字符。每个序列以一个反斜杠(“\”)开始,指出临时不同于通常的字符解释。注意NUL字节与NULL值不同;NUL为一个零值字节,而NULL为没有值。3.字符串类型字符串中可使用几个转义序列,它们用来表示特殊的字符。每个序列3.字符串类型转义字符含义\0NUL(ASCII0)\’单引号\”双引号\b退格\n新行\r回车\t

制表符\\反斜杠3.字符串类型转义字符含义\0NUL(ASCII03.字符串类型要在串中包括一个引号,可有如下三种选择:如果串是用相同的引号括起来的,那么在串中需要引号的地方双写引号即可。如果串是用另外的引号括起来的,则不需要双写相应引号。用反斜杠方式表示,这种方法不去管用来将串括起的是单引号还是双引号。3.字符串类型要在串中包括一个引号,可有如下三种选择:3.1CHAR和VARCHAR这两个类型都用于保存小型字符串,只是MySQL保存它们的方法不同。CHAR[字符串长度]CHAR[字符串长度]用于声明一个定长类型的列,其中“字符串长度”用于限制可插入的字符串的最大长度,如CHAR[100]最多只能保存100个字符。“字符串长度”的设置范围为0到255。3.1CHAR和VARCHAR这两个类型都用于保存小型字3.1CHAR和VARCHARCHAR类型的列,无论插入的字符数量是多少,最终都会被MySQL处理成指定字符串长度的列。当插入的字符串长度小于指定的字符串长度时,MySQL会在字符串尾部以空格进行填充。3.1CHAR和VARCHARCHAR类型的列,无论插入3.1CHAR和VARCHARVARCHAR[字符串长度]VARCHAR[字符串长度]用于声明一个变长类型的列,其中“字符串长度”也用于限制插入字符串的最大长度,“字符串长度”的设置范围为0到65535。(由于MySQL规定一条记录的所有列的长度之和不能超过65535个字节,受此限制一列的最大长度实际只能到65532字节。)3.1CHAR和VARCHARVARCHAR[字符串长度3.1CHAR和VARCHAR与CHAR类型不同的是,VARCHAR类型在保存数据时使用的是“按需分配”存储空间的策略,它在保存数据的同时记录下该字符串的实际长度,因此所占用的存储空间大多数情况下是小于指定的“字符串长度”的。如果插入的字符串的长度超过了指定的字符串长度,MySQL会截断该字符串。当被截掉的字符串不是空格时,MySQL会进行警告提示。如果MySQL工作在“strict”模式,将不允许截掉空格以外的字符,否则会产生运行错误,而不仅仅是一个警告提示。3.1CHAR和VARCHAR与CHAR类型不同的是,V3.1CHAR和VARCHAR使用VARCHAR类型是要注意的一个问题是,VARCHAR在保存字符串时,会自动去除字符串结束处的空格,如果要进行字符串的比较,MySQL也会将仅有尾部空格不同的字符串认为是相同的字符串。这一点与标准SQL的处理方法不同。3.1CHAR和VARCHAR使用VARCHAR类型是要3.2BINARY和VARBINARYBINARY和VARBINARY与CHAR和VARCHAR类型很相似,它们主要用存储二进制数据,而不是普通的字符串。这两种数据类型没有对应的字符集,对它们的排序或比较也都只是基于二进制值的比较,而不是字符集的比较。BINARY和VARBINARY的最大长度与CHAR和VARCHAR类型一样,唯一的区别是BINARY和VARBINARY类型的最大长度是指的字节数,而CHAR和VARCHAR类型的最大长度则是指的字符数。3.2BINARY和VARBINARYBINARY和V3.2BINARY和VARBINARYMySQL在存储BINARY类型时,会在数据的尾部追加0x00(数字0)以确保长度为指定的长度,但在执行SELECT语句会不会主动删除掉尾部的0x00。同时,尾部的0x00也会参与比较和排序,甚至会影响到DISTINCT关键字。另外,0x00与空格也不相等,0x00<空格。3.2BINARY和VARBINARYMySQL在存储3.3BLOB和TEXT使用BLOB和TEXT保存数据时,不会发生数据的变化。BLOBBLOB用于保存大型二进制数据,MySQL中共有四种BLOB型的数据类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。3.3BLOB和TEXT使用BLOB和TEXT保存数据3.3BLOB和TEXT这四种类型的区别只是能够保存的数据的最大长度不同。对TEXT类型的数据进行比较时,MySQL会忽略数据尾部的空格,如果两个字符串仅仅是尾部的空格数量不一致,会被判断为相等的字符串。3.3BLOB和TEXT这四种类型的区别只是能够保存的3.3BLOB和TEXTTEXTTEXT类型用于保存大型字符串。与BLOB类型一样,TEXT类型也分为TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT四种类型,各类型能够存储的最大字节数与对应的BLOB类型一致。3.3BLOB和TEXTTEXT3.3BLOB和TEXTBLOB类型用于存储二进制类型的数据,TEXT类型用于存储标准字符串数据。BOLB类型的数据在进行比较时,会用二进制数据进行比较,TEXT类型的数据都有相对应的字符集,在进行比较时也是基于字符集进行比较当插入的数据长度超过指定的长度时,MySQL会截断数据,同时发出警告信息。如果MySQL工作在“STRICT”模式,则会产生错误。3.3BLOB和TEXTBLOB类型用于存储二进制类型3.4枚举ENUMENUM枚举类型的数据可以理解成只能取指定的几个值的字符串,其可以取的值在建表时就在列定义中列出了清单。值列表中的数据必须是用引号引出来的字符串,而不能是一个运算表达式或字符串变量,换句话说,不能使用用户定义的变量作为枚举类型的值列表中的值。3.4枚举ENUMENUM枚举类型的数据可以理解成只能3.4枚举ENUM在以下情况下,值列表中的值可以是空字符串(’’)或空值(NULL):1.如果将一个无效值(不在值列表中的字符串)插入一个ENUM类型的列时,MySQL会将空字符串作为一个特殊的错误值插入到该列中。事实上,这个空字符串会被保存成0x00,只是显示时显示会空字符串,这个问题我们等一会儿再详细讨论。如果MySQL是工作在“STRICT”模式,插入无效值则会产生错误。3.4枚举ENUM在以下情况下,值列表中的值可以是空字3.4枚举ENUM2.如果一个ENUM类型的列被设置成允许NULL值,则可以将NULL值直接赋值给该类型的列,而且MySQL会将该列的默认值也设置为NULL。如果一个ENUM类型的列被声明为NOTNULL,该列的默认值将是该ENUM类型的值列表中的第一个成员。3.4枚举ENUM2.如果一个ENUM类型的列被设置成3.4枚举ENUMMySQL在保存ENUM类型的数据值,并不会保存值列表中的字符串值,而是为值列表中的每个字符串值分配一个编号,这个编号称为索引值。索引值的设置方法如下:1.从1开始依次为值列表中的每一个值设置索引值,如值列表内容为(’red’,’blue’,’white’,’black’),则各值对应的索引值为(1,2,3,4)。2.代表错误的空字符串的索引值为0,因此可以通过判断列值是否为0还找出数据有误的记录,代码如下:mysql>SELECT*FROM表名WHEREenum列=0;3.NULL值的索引为NULL。3.4枚举ENUMMySQL在保存ENUM类型的数据值3.4枚举ENUM可以将ENUM类型的数据直接作为数字使用,该数据所对应的数字即是其索引值。例如,可以用如下语句将ENUM列显示为其索引值:mysql>SELECTenum列+0FROM表名;3.4枚举ENUM可以将ENUM类型的数据直接作为数字3.4枚举ENUM如果将一个数字赋值给ENUM类型的列,该数字会被处理成该ENUM类型的索引值,实际保存的值将是该索引值对应的枚举成员。虽然这种做法是可行的,但本书不建议使用这种方法来定义一个ENUM列,因为这很容易引起混淆,并且完全丧失了ENUM类型的优势。3.4枚举ENUM如果将一个数字赋值给ENUM类型的列3.4枚举ENUMMySQL在对ENUM类型的列进行排序时,会按照其索引值进行排序。例如,对于ENUM('a','b'),'a'排在'b'前面,但对于ENUM('b','a'),'b'排在'a'前面。空字符串排在非空字符串前面,并且NULL值排在所有其它枚举值前面。要想防止意想不到的结果,按字母顺序规定ENUM列。还可以使用GROUPBYCAST(ENUM列ASCHAR)来确保按照词汇对列进行排序而不是用索引值。3.4枚举ENUMMySQL在对ENUM类型的列进行排3.4枚举ENUM如果想查看一个ENUM列的所有可能的值,可以使用如下语句:SHOWCOLUMNSFROM表名LIKEenum列3.4枚举ENUM如果想查看一个ENUM列的所有可能的3.5多值SETSET类型也对应一个值列表,但与ENUM不同的是,SET类型允许被赋值为这些值中若干个值的组合。指定包括多个SET成员的SET列值时各成员之间用逗号(‘,’)隔开,这就要求SET成员值本身不能包含逗号。3.5多值SETSET类型也对应一个值列表,但与ENUM3.5多值SETSET最多可以有64个不同的成员。当创建表时,SET成员值的尾部空格将自动被删除。当读取SET类型的列时,MySQL将会使用SET类型定义时所使用的大小写来显示。同ENUM类型一样,也可以为SET列分配字符集和校对规则。3.5多值SETSET最多可以有64个不同的成员。3.5多值SETMySQL保存SET类型的值时,并不会保存相应的成员字符串,而是采用二进制的保存方法。二进制数字的每一位对应于SET值的一项,其中低阶位对应第1个SET成员。如果将一个SET类型的值作为数字使用时,该值的位设置对应组成列值的SET成员。如下代码可以读取出SET类型的列所对应索引值:mysql>SELECTset列+0FROM表名;3.5多值SETMySQL保存SET类型的值时,并不会保4.日期时间类型日期时间类型包括为DATETIME、DATE、TIMESTAMP、TIME和YEAR等类型。每个类型都有不同的有效值范围和“零”值,当指定的时间值无法保存到对应的类型中时,MySQL将会把“零”值保存在该类型中。TIMESTAMP是比较特殊的类型,它有专有的自动更新特性。4.日期时间类型日期时间类型包括为DATETIME、D4.日期时间类型一般情况下,如果试图插入一个不合法的日期,MySQL将给出警告或错误。但是如果打开了“ALLOW_INVALID_DATES”SQL模式,则MySQL会允许接受一些不合法的日期,如'1999-11-31'。在“ALLOW_INVALID_DATES”SQL模式下,MySQL只验证月范围为从0到12,日范围为从0到31,注意月和日都可以为零。4.日期时间类型一般情况下,如果试图插入一个不合法的日4.日期时间类型MySQL还允许将'0000-00-00'保存为“伪日期”(如果不找启用NO_ZERO_DATESQL模式)。这在某些情况下比使用NULL值更方便,而且数据和索引占用的空间会更小。4.日期时间类型MySQL还允许将'0000-00-04.日期时间类型使用时间日期类型时,应该注意以下几点:1.包含两位年值的日期会令人模糊,因为无法确定其世纪。MySQL使用以下规则解释两位年值:70-99范围的年值转换为1970-199900-69范围的年值转换为2000-20692.日期总是以年-月-日顺序(如,'98-09-04'),而不是月-日-年或日-月-年顺序。3.如果需要,MySQL可以将日期或时间类型的值转换为数字,反之亦然。4.日期时间类型使用时间日期类型时,应该注意以下几点:4.日期时间类型4.当MySQL遇到一个日期或时间类型的超出范围或对于该类型不合法的值时,它将该值转换为该类的“零”值。但是超出范围的TIME值会被裁剪到TIME范围的相应端点。5.“零”值是特殊值,可以使用值'0'或0来将一个时间日期类型的列设置成“零”值。4.日期时间类型4.当MySQL遇到

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论