使用MySQL数据库存储数据时,不同的数据类型决定了MySQL存储方式的不同,为此,MySQL数据库提供了多种数据类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。
1.1 整数类型: 根据数值取值范围的不同,MySQL中的整数类型可分为5种,分别是TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT。
数据类型字节数无符号数的取值类型有符号数的取值范围TINYINT10~255-128~127SMALLINT20~65535-32768~32767MEDIUMINT30~16777215-8388608~8388607INT40~4294967295-2147483648~2147483647BIGINT80~18446744073709551615-9223372036854775808~92233720368547758071.2 浮点数类型和定点数类型 在MySQL数据库中,存储的小数都是使用浮点数和定点数来表示的。浮点数的类型有两种,分别是单精度浮点数类型(FLOAT)和双精度浮点数类型(DOUBLE)。而定点数类型只有DECIMAL类型。
数据类型字节数无符号数的取值类型有符号数的取值范围FLOAT4-3.402823466E+38~-1.175494351E-38,0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)DOUBLE8(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)DECIMAL(M,D)对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值为了方便在数据库中存储日期和时间,MySQL提供了表示日期和时间的数据类型,分别是YEAR、DATE、TIME、DATETIME和TIMESTAMP。
数据类型字节数取值范围日期格式零值YEAR11901~2155YYYY0000DATE41000-01-01~9999-12-3YYYY-MM-DD0000-00-00TIME3-838:59:59~838:59:59HH:MM:SS00:00:00DATETIME81000-01-01 00:00:00~9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS0000-00-00 00:00:00TIMESTAMP41970-01-01 00:00:01~2038-01-19 03:14:07YYYY-MM-DD HH:MM:SS0000-00-00 00:00:00需要注意的是,如果插入的数值不合法,系统会自动将对应的零值插入数据库中。 2.1 YEAR类型 YEAR表示年份,在MySQL中可以使用以下三种格式指定YEAR类型的值。 (1)使用4位字符串或数字表示,范围为’1901’~’2155’或1901~2155; (2)使用两位字符串表示,范围为’00’~’99’,其中00~69范围的值会被转换为2000~2069范围的YEAR值,70~99范围的值会被转换为1970~1999范围的YEAR值; (3)使用两位数字表示,范围为1~99,其中,1~69范围的值会被转换为2001~2069范围的YEAR值,70~99范围的值被转换为1970~1999范围的YEAR值。 需要注意的是,当使用YEAR类型时,一定要区分’0’和0,因为字符串格式的’0’表示的YEAR值为2000,而数字格式的0表示YEAR值时0000。 2.2 DATE类型 DATE类型用于表示日期值,不包含时间部分。 (1)以’YYYY-MM-DD’或者’YYYYMMDD’字符串格式表示; (2)以’YY-MM-DD’或者’YYMMDD’字符串格式表示; (3)以YY-MM-DD或者YYMMDD数字格式表示; (4)使用CURRENT_DATE或者NOW()表示当前系统日期。 2.3 TIME类型 TIME类型用于表示时间值,它的显示形势一般为HH:MM:SS,其中,HH表示小时,MM表示分,SS表示秒。在MySQL中,可以使用以下三种格式指定TIME类型的值。 (1)以’D HH:MM:SS’字符串格式表示,其中,D表示日,可以取0~34之间的值,插入数据时,小时的值等于(D*24+HH); (2)以’HHMMSS’字符串格式或者HHMMSS数字格式表示; (3)使用CURRENT_TIME或NOW()输入当前系统时间。 2.4 DATETIME类型 DATETIME类型用于表示日期和时间,它的显示形式为‘YYYY-MM-DD HH:MM:SS’,其中,YYYY表示年,MM表示月,DD表示日,HH表示小时,MM表示分,SS表示秒。 (1)以‘YYYY-MM-DD HH:MM:SS’或者’YYYYMMDDHHMMSS’字符串格式表示的日期和时间,取值范围为’1000-01-01 00:00:00’~‘9999-12-3 23:59:59’. (2)以’YY-MM-DD HH:MM:SS’或者’YYMMDDHHMMSS’字符串格式表示的日期和时间,其中YY表示年,取值范围为’00’~‘99’。 (3)以YYYYMMDDHHMMSS或者YYMMDDHHMMSS数值格式表示日期和时间。 (4)使用NOW来输入当前系统的日期和时间。 2.5 TIMESTAMP类型 TIMESTAMP类型用于表示日期和时间,它的显示形式与DATETIME相同,但取值范围比DATETIME小。 (1)使用CURRENT_TIMESTAMP来输入系统当前日期和时间; (2)输入NULL时,系统会输入系统当前日期和时间; (3)无任何输入时,系统会输入系统当前日期和时间。
为了存储字符串、图片和声音等数据,MySQL提供了字符串和二进制类型。
数据类型类型说明CHAR用于表示固定长度的字符串类型VARCHAR用于表示可变长度的字符串类型BINARY用于表示固定长度的二进制数据VARBINARY用于表示可变长度的二进制数据BOLB用于表示二进制大数据TEXT用于表示大文本数据ENUM表示枚举类型,只能存储一个枚举字符串值SET表示字符串对象,可以有零个或多个值BIT表示位字段类型3.1 CHAR类型和VARCHAR类型 CHAR和VARCHAR类型都可以用来表示字符串数据,不同的是,VARCHAR可以存储可变长度的字符串。 3.2 BINARY和VARBINARY类型 BINARY和VARBINARY类型类似于CHAR和VARCHAR,不同的是,它们所表示的是二进制数据。定义BINARY和VARBINARY类型的方式如下所示:
BINARY(M)或VARBINARY(M)在上述格式中,M指的是二进制数据的最大字节长度。 3.3 TEXT类型
数据类型存储范围数据类型存储范围TINYTEXT0~255字节MEDIUMTEXT0~16777215字节TEXT0~65535字节LONGTEXT0~4294967295字节3.4 BLOB类型
数据类型存储范围数据类型存储范围TINYBLOB0~255字节MEDIUMBLOB0~16777215字节BLOB0~65535字节LONGBLOB0~4294967295字节3.5 ENUM类型 ENUM类型又称为枚举类型,定义ENUM类型的数据格式如下所示:
ENUM('值1','值2','值3',...,'值n')在上述格式中,(‘值1’,‘值2’,‘值3’,…,‘值n’)称为枚举列表,ENUM类型的数据只能从枚举列表中取,并且只能取一个,需要注意的是,枚举列表中的每个值都有一个顺序编号,MySQL中存入的就是这个顺序编号,而不是列表中的值。 3.6 SET类型 SET类型用于表示字符串对象,它的值可以有零个或多个,SET类型数据的定义格式与ENUM类型类似,具体语法格式如下所示:
SET('值1','值2','值3',...,'值n')与ENUM类型相同,‘值1’,‘值2’,‘值3’,…,‘值n’)列表中的每个值都有一个顺序编号,MySQL中存入的也是这个顺序编号,而不是列表中的值。 3.7 BIT类型 BIT类型用于表示二进制数据。定义BIT类型的基本语法格式如下所示:
BIT(M)在上述格式中,M用于表示每个值的位数,范围为1~64。需要注意的是,如果分配的BIT(M)类型的数据长度小于M,将在数据的左边用0补齐。例如,为BIT(6)分配值b‘101’的效果与分配b’000101’相同。