MySQl数据类型
Posted 老鸭胆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQl数据类型相关的知识,希望对你有一定的参考价值。
目录
数据类型是数据的一种属性,其可以决定数据的存储格式、有效范围和相应的限制。mysql的数据类型包括整数类型、浮点数类型、定点数类型、日期和时间类型、字符串类型和二进制数据类型。
- 整数类型、浮点数类型和定点数类型
- 日期与时间类型
- 字符串类型
- 二进制类型
1、MySQL 数据类型介绍
1.1 整数类型
整数类型是数据库中最基本的数据类型。标准SQL中支持INTEGER和SMALLINT这两类整数类型。MySQL数据库除了支持这两种类型以外,还扩展支持了TINYINT、MEDIUMINT和BIGINT。
不同类型的整数类型的字节数不同。根据类型所占的字节数可以算出该类型的取值范围。
例如,TINYINT 的空间为1个字节,1个字节是8位。那么,TINYINT无符号数的最大值为2^8-1,即为255。TINYINT 有符号数的最大值为2^7-1,即为127。同理可以算出其他不同整数类型的取值范围。
MySQL支持类型类型的名称后面指定该类型的显示宽度,其基本形式如下:
数据类型(显示宽度)
其中,数据类型参数是整数数据类型的名称,显示宽度参数是指定宽度的数值。显示宽度是指能够显示的最大数据的长度。例如,int(4)就是指定int类型的显示宽度为4。在不指定宽度的情况下,每个整数类型都有默认的显示宽度。
一个数据类型的默认显示宽度刚好能显示该数据类型的所有值。下图的整数类型都没有设置显示宽度,都为其默认值。
在整数类型使用时,还可以搭配使用zerofill参数。zerofill参数表示数字不足的显示空间由0来填补。使用zerofill参数时,MySQL会自动加上UNSIGNED属性(表示无符号数),其显示宽度比默认宽度小1。
此表中显示的数值为:
当插入数据的显示宽度大于设置的显示宽度时,数据依然可以插入,并且可以完整的显示出来,设置的显示宽度在显示的该记录时失效。
!!!但是要注意数据的宽度不能大于默认宽度。如果大于默认宽度,那该数据已经超过了该类型的最大值。因为最大值的宽度必须是小于等于默认宽度。如果一个值大于了这个类型的最大值,那么这个值是不可能插入的。
字段选择哪个整数类型,取决于该字段的范围。如果字段的最大值不超过255。那选择TINYINT 类型就足够了。取值很大时,根据最大值的范围选择INT类型或者BIGINT类型。现在最常用的整数类型是INT类型。
1.2 浮点数类型和定点数类型
MySQL中使用浮点数类型和定点数类型来表示小数。浮点数类型包括单精度浮点数(FLOAT型)和双精度浮点数(DOUBLE型)。定点数类型就是DECIMAL型。
从上面表中可以看到,DECIMAL型的取值范围与DOUBLE相同。但是,DECIMAL的有效取值范围由M和D决定。而且,DECIMAL型的字节数是M+2。也就是说,定点数的存储空间是根据其精度决定的。
MySQL中可以指定浮点数和定点数的宽度,其基本形式如下:
数据类型(M,D)
其中,“数据类型”参数是浮点数或定点数的数据类型名称;M参数称为精度,是数据的总长度,小数点不占位置;D参数称为标度,是指小数点后的长度为D。例如, FLOAT(6,2)的含义数据FLOAT型,数据长度为6,小数点后保留2位。按此定义,1234.56是符合要求的。
!!!上述指定小数精度的方法虽然都适合于浮点数和定点数,但不是浮点数的标准用法。建议在定义浮点数时,如果不是实际情况需要,最好不要使用。如果使用了,可能会影响数据库的迁移。对定点数而言,DECIMAL(M,D)是定点数的标准格式,一般情况下可以选择这种数据类型。
如果插入值的精度高于实际定义的精度,系统会自动进行四舍五入处理,使值的精度达到要求。不同的是,FLOAT型和 DOUBLE型在四舍五入时不会报错,而DECIMAL型会有警告。
警告显示,字段c插入的信息被截断。而a和b字段却没有警告。
此表存储的数据:
如果不指定精度,浮点数和定点数有其默认的精度。FLOAT型和 DOUBLE型默认会保存实际精度,但这与操作系统和硬件的精度有关。DECIMAL型默认整数位为10,小数位为o,即默认为整数。
此表显示的数值为:
上面结果显示,字段a和b是按照实际精度保存的。而字段c进行了四舍五入处理,而且没有小数位。同时系统出现警告。
在MySQL中,定点数以字符串形式存储。因此,其精度比浮点数要高。而且,浮点数会出现误差,这是浮点数一直存在的缺陷。如果要对数据的精度要求比较高,还是选择定点数( DECIMAL)比较安全。
1.3 日期与时间类型
日期与时间类型是为了方便在数据库中存储日期和时间而设计的。MySQL中有多种表示日期和时间的数据类型。其中,YEAR类型表示年份;DATE类型表示日期;TIME类型表示时间;DATETIME和TIMESTAMP表示日期和时间。本小节将介绍上述类型的存储的字节数、取值范围和特点。
- YEAR类型
- TIME类型
- DATE类型
- DATETIME类型
- TIMESTAMP类型
每种日期与时间类型都有一个有效范围。如果插入的值超过了这个范围,系统会报错,并将零值插入到数据库中。不同的日期与时间类型有不同的零值。
1、year类型
YEAR类型使用1个字节来表示年份。MySQL中以YYYY的形式显示YEAR类型的值。给YEAR类型的字段赋值的表示方法如下:
1)使用4位字符串或数字表示。
其范围从1901~2155。输入格式为‘YYYY'或YYYY。例如,输入‘2008’或者2008,可直接保存为2008。如果超过了范围,就会插入0000。
【额,不知道为什么插入超范围的数值。直接出错了。】
2)使用⒉位字符串表示。
‘00’~‘69’转换为2000~2069,‘70’~‘99’转换为1970~1999。例如,输入‘35’,YEAR值会转换为2035;输入‘90’,YEAR值会转换为1990。‘0’和‘00’的效果是一样的。
3)使用2位数字表示。
1~69转换为2001~2069,70~99转换为1970~1999。注意,2位数字与2位字符串是不一样的。因为,如果插入0,转换后的YEAR值不是2000,而是0000。
2、time类型
TIME类型使用3个字节来表示时间。MySQL中以 HH:MM:SS 的形式显示TIME类型的值。其中,HH表示时;MM表示分,取值范围为0~59;SS表示秒,取值范围是0~59。TIME类型的范围可以从‘-838:59:59’~‘838:59:59’。虽然,小时的范围是0~23。但是为了表示某种特殊需要的时间间隔,将TIME类型的范围扩大了。而且,还支持了负值。
TIME类型的字段赋值的表示方法如下。
1) ‘D HH:MM:SS’格式的字符串表示。
其中,D表示天数,取值范围是0~34。保存时,小时的值等于(D*24+HH)。例如,输入‘2 11:30:50’,TIME类型会转换为59:30:50。当然,输入时可以不严格按照这个格式,也可以是“HH:MM:SS”,“HH:MM”、“D HH:MM”、“D HH”或者“SS”等形式。例如,输入‘30’,TIME类型会转换为00:00:30。
2) 'HHMMSS’格式的字符串或HHMMSS格式的数值表示。
例如,输入‘345454’,TIME类型会转换为34:54:54;输入值为数值345454,TIME类型也会转换为34:54:54。如果输入0和‘0’,那么TIME类型会转换为0000:00:00。
3) 使用CURRENT_TIME或者NOWO输入当前系统时间。
结果显示,CURRENT_TIME和NOW()都转换为当前系统时间。因此,如果要获取当前的系统时间,最好选择CURRENT_TIME和 NOW()。
一个合法的 TIME值,如果超出TIME的范围,将被裁为范围最接近的端点,如,‘880:00:00’被转换为838:59:59。无效TIME值,在命令行下是无法被插入到表中的。注意:如果插入的TIME值是无效的,系统会提示“ERROR 1292(22007): Incorrect time value”。即使这个无效值被插入到表中,其值也会被转换为00:00:00。例如,'877034’就是一个无效的值,因为分钟部分超出了范围。
TIME类型专门用来存储时间数据,而且只占3个字节。如果只需要记录时间,选择TIME类型是最合适的。
3、date类型
DATE类型使用4个字节来表示日期。MySQL中是以 YYYY-MM-DD 的形式显示DATE类型的值。其中,YYYY表示年;MM表示月;DD表示日。DATE 类型的范围可以从‘1000-01-01’~‘9999-12-31’。给DATE类型的字段赋值的表示方法如下:
1) ‘YYYY-MM-DD’或‘YYYYMMDD’格式的字符串表示。
这种方式可以表达的范围是‘1000-01-01’~‘9999-12-31’。例如,输入‘4008-2-8’,DATE类型将转换为4008-02-08;输入‘20220308’,DATE类型将转换为2022-03-08。
MySQL中还支持一些不严格的语法格式,任何标点都可以用来做间隔符。如'YYYY/MM/DD’,‘YYYY@MM@DD’.‘YYYY.MM.DD’等分隔形式。例如,输入‘2011.3.8’,DATE类型将转换为2011-03-08。
2)‘YY-MM-DD’或者‘YYMMDD’格式的字符串表示。
其中‘YY'的取值,‘00’~‘69’转换为2000~2069,‘70’~‘99’转换为1970~1999。与 YEAR类型类似。例如,输入‘35-01-02’,DATE类型将转换为2035-01-O2;输入‘800102’,DATE类型将转换为1980-01-02。
而且,MySQL中也支持一些不严格的语法格式,如‘YY/MM/DD'、'YY@MM@DD’、'YY.MM.DD’等分隔形式。例如,输入‘89@3@8’,DATE类型将转换为1989-03-08。
3) 使用CURRENT_DATE或NOW()来输入当前系统日期。
CURRENT_DATE 和 NOW()转换为当前系统日期。DATE类型只占用4个字节。如果只需要记录日期,选择DATE类型是最合适的。
4、datetime类型
DATETIME类型使用8个字节来表示日期和时间。MySQL中以‘YYYY-MM-DDHH:MM:SS’的形式显示DATETIME类型的值。从其形式可以看出,DATETIME类型可以直接用DATE类型和TIME类型组合而成。给DATETIME类型的字段赋值的表示方法如下:
1)‘YYYY-MM-DD HH:MM:SS’或‘YYYYMMDDHHMMSS’格式的字符串表示。
这种方式可以表达的范围是‘1000-01-01 00:00:00’~‘9999-12-31 23:59:59’。例如,输入‘2008-08-08 08:08:08’,DATETIME类型转换为2008-08-08 08:08:08;输入‘20080808080808’,同样转换为2008-08-08 08:08:08。
MySQL中还支持一些不严格的语法格式,任何标点都可以用来做间隔符。情况与DATE类型相同。而且,时间部分也可以用任意分隔符隔开,这与TIME类型不同。TME类型只能用“:”隔开。例如,输入‘2008@08@08 08*08*08’,同样转换为2008-08-0808:08:08。
2) ‘YY-MM-DD HH:MM:SS’或‘YYMMDDHHMMSS’格式的字符串表示。
其中‘YY’的取值,‘00’~‘69’转换为2000~2069,‘70’~‘99’转换为1970~1999。与 YEAR型和DATE型相同。
3) YYYYMMDDHHMMSS或 YYMMDDHHMMSS格式的数字表示。
例如,输入20080808080808 ,DATETIME类型转换为2008-08-08 08:08:08 ;输入080808080808,同样转换为2008-08-08 08:08:08。如果输入的值为0,那么DATETIME类型转换为0000-00-00 00-00-00。
4) 使用NOW()来输入当前系统日期和时间。
DATETIME类型用于记录日期和时间,其作用等价于DATE类型和TIME类型的组合。
一个DATETIME类型的字段可以用一个DATE类型的字段和一个TIME类型的字段代替。但是,如果需要同时记录日期和时间,选择DATETIME类型是个不错的选择。
5、timestamp类型
TIMESTAMP类型使用4个字节来表示日期和时间。TIMESTAMP类型的范围是从1970-01-01 08:00:01~2038-01-19 11:14:07.MySQL中也是以‘YYYY-MM-DD HH:MM:SS'的形式显示TIMESTAMP类型的值。从其形式可以看出,TIMESTAMP类型与DATETIME类型显示的格式是一样的。给TIMESTAMP类型的字段赋值的表示方法基本与DATETIME类型相同。值得注意的是,TIMESTAMP类型范围比较小,没有DATETIME类型的范围大。因此,输入值时要保证在 TIMESTAMP类型的有效范围内。
下面介绍 TIMESTAMP类型的几种与DATETIME类型不同的形式。内容如下:
(1)使用CURRENT_TIMESTAMP来输入系统当前日期与时间。
(2)输入NULL时,系统会输入系统当前日期与时间。
(3)无任何输入时,系统会输入系统当前日期与时间。
【注意:这里不能同时插入,会报错】
TIMESTAMP类型还有一个很大的特殊点,就是时间是根据时区来显示的。例如,在东八区插入的TIMESTAMP类型为2009-09-30 14:21:25。在东七区显示时,时间部分就变成了13:21:25。在东九区显示时,时间部分就变成了15:21:25。
需要显示日期与时间,TIMESTAMP类型能够根据不同地区的时区来转换时间。但是,timestamp类型的范围太小。其最大时间为2038-01-19 11:14:07。如果插入的时间比这个大,将会出错。例如,输入2038-01-19 11:14:08,系统会出现“ERROR 1292(22007):Incorrect datetime value: '2038-01-1911:15:08' for column 'a' at row 1”这样的错误提示。因此,若需要的时间范围比较大,还是选择DATETIME类型比较安全。
1.4 字符串类型
字符串类型是在数据库中存储字符串的数据类型。字符串类型包括CHAR、VARCHAR、BLOB、TEXT、ENUM和SET。
1、char类型和varchar类型
CHAR类型和VARCHAR类型都是在创建表时指定了最大长度,其基本形式如下:
字符串类型(M)
其中,“字符串类型”参数指定了数据类型为CHAR类型还是 VARCHAR类型;M参数指定了该字符串的最大长度为M。例如,CHAR(4)就是指数据类型为CHAR类型,其最大长度为4。
CHAR类型的长度是固定的,在创建表时就指定了。其长度可以是0~~255的任意值。例如,CHAR(100)就是指定CHAR类型的长度为100。
VARCHAR类型的长度是可变的,在创建表时指定了最大长度。定义时,其最大值可以取0~65535之间的任意值。指定VARCHAR类型的最大值以后,其长度可以在0到最大长度之间。例如,VARCHAR(100)的最大长度是100。但是,不是每条记录都要占用100个字节。而是在这个最大值范围内,使用多少分配多少。VARCHAR类型实际占用的空间为字符串的实际长度加1。这样,即可有效节约系统的空间。
CHAR(5)所占用的空间都是5个字节。这表示 CHAR(5)的固定长度就是5个字节。而VARCHAR(5)所占的字节数是实际长度的基础上加1。因为varchar类型的字符串的结束标志符占用了1个字节。从表的第三行可以看到,VARCHAR将字符串‘123’最后面的空格依然保留着,而CHAR类型中将‘123’后面的空格自动删除了。
如果CHAR和VARCHAR的长度为5,而插入的值为‘123456’。那么系统会阻止这个值的插入,并且会报错。错误信息是“ERROR 1406(22001): Data too longfor column”。这说明插入的字符串的长度已经大于了可以插入的最大值。
2、text类型
TEXT类型是一种特殊的字符串类型。TEXT只能保存字符数据,如新闻的内容等。TEXT类型包括TINYTEXT、TEXT、MEDIUMTEXT 和LONGTEXT。
各种TEXT类型的区别在于允许的长度和存储空间不同。因此在这几种 TEXT类型中,根据需求选取既能满足需要又最节约空间的类型即可。
3、enum类型
ENUM类型又称为枚举类型。在创建表时,ENUM类型的取值范围就以列表的形式指定了。其基本形式如下:
属性名 enum(‘值1’,‘值2’,...,‘值 n’)
其中,属性名参数指字段的名称;“值 n”参数表示列表中的第n 个值,这些值末尾的空格将会被系统直接删除。ENUM类型的值只能取列表中的一个元素。其取值列表中最多能有65535个值。列表中的每个值都有一个顺序排列的编号,MySQL中存入的是这个编号,而不是列表中的值。
如果 ENUM类型加上了NOT NULL属性,其默认值为取值列表的第一个元素。如果不加NOT NULL属性,ENUM类型将允许插入NULL,而且NULL为默认值。
不指定插入值时,插入的是NULL;插入NULL时,可以成功的将NULL插入到表中。如果插入的值为‘boy’,系统会出现“ERROR 1265 (01000): Data truncated forcolumn”这样的错误提示。只能插入列表中已有的元素或空值。
不指定插入值时,插入的是“woman”,也就是列表的第一个元素。如果插入的值为NULL,则会出现“ERROR 1048 (23000): Column 'a' cannot be null”这样的错误提示。
如果只能选取列表中的一个值,就选择ENUM类型;如果需要选取列表中多个值的组合,则需要选择SET类型。
4、set类型
在创建表时,SET类型的取值范围就以列表的形式指定了。其基本形式如下:
属性名 set(‘值1’,‘值2’,...,‘值n’)
“属性名”参数指字段的名称;“值n”参数表示列表中的第n个值,这些值末尾的空格将会被系统直接删除。其基本形式与ENUM类型一样。SET类型的值可以取列表中的一个元素或者多个元素的组合。取多个元素时,不同元素之间用逗号隔开。SET类型的值最多只能是有64个元素构成的组合。
同ENUM类型一样,列表中的每个值都有一个顺序排列的编号。MySQL中存入的是这个编号,而不是列表中的值。
插入记录时,SET字段中的元素顺序无关紧要。存入 MySQL 数据库后,数据库系统会自动按照定义时的顺序显示。
结果显示,'C,B,D'插入后依然按照'B,C,D'的顺序存储。如果插入的值为'B,E,F,系统会出现“ERROR 1265(01000): Data truncated for column”这样的错误提示。这说明,插入的值必须是在定义的集合中的元素。否则,系统会报错。
1.5 二进制类型
二进制类型是在数据库中存储二进制数据的数据类型。二进制类型包括 BINARY、VARBINARY、BIT、TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。
1、binary和varbinary类型
BINARY 类型和 VARBINARY类型都是在创建表时指定了最大长度,其基本形式如下:
字符串类型(M)
其中,“字符串类型”参数指定了数据类型为BINARY类型还是VARBINARY类型;M参数指定了该二进制数的最大字节长度为M。这与CHAR类型和VARCHAR类型相似。例如,BINARY (10)就是指数据类型为BINARY类型,其最大长度为10。
BINARY类型的长度是固定的,在创建表时就指定了。不足最大长度的空间由“O”补全。例如,BINARY (50)就是指定BINARY类型的长度为50。
VARBINARY 类型的长度是可变的,在创建表时指定了最大长度。指定好了VARBINARY类型的最大值以后,其长度可以在0到最大长度之间。例如,VARBINARY(50)的最大字节长度是50。但是,不是每条记录的字节长度都是50。在这个最大值范围内,使用多少分配多少。VARBINARY类型实际占用的空间为实际长度加1。这样,可以有效的节约系统的空间。
上述结果说明,BINARY 类型使用了最大的长度。而 VARBINARY类型只使用了这个字符占用的长度。
由上面结果可以看出,b='d\\0\\0\\0'的值为1,表示两个是相等的。同理,vb='d'的值为1,表示这两者也是相等的。这就说明,BINARY类型需要用“\\0”来补足空余的空间,而VARBINARY不需要。这也解释了“d”在b字段和''vb'字段中长度不同的原因。
2、bit类型
BIT类型也是在创建表时指定了最大长度,其基本形式如下:
bit (M)
其中,“M”指定了该二进制数的最大字节长度为M,M的最大值为64。例如,BIT(4)就是数据类型为BIT类型,长度为4。若字段的类型BIT(4),存储的数据是从0~15。因为,变成二进制以后,15的值为1111,其长度为4。如果插入的值为 16,其二进制数为10000,长度为5,超过了最大长度,因此,大于等于16的数是不能插入到BIT(4)类型的字段中的。
在查询BIT类型的数据时,要用BIN(字段名+0)来将值转换为二进制显示。
3、blob类型
BLOB类型是一种特殊的二进制类型。BLOB可以用来保存数据量很大的二进制数据,如图片等。BLOB类型包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。这几种 BLOB类型最大的区别就是能够保存的最大长度不同。LONGBLOB的长度最大,TINYBLOB的长度最小。
BLOB类型与TEXT类型很类似。不同点在于BLOB类型用于存储二进制数据, BLOB类型数据是根据其二进制编码进行比较和排序。而 TEXT类型是文本模式进行比较和排序的。
BLOB类型主要用来存储图片、PDF文档等二进制文件。通常情况下,可以将图片、PDF文档都可以存储在文件系统中,然后在数据库中存储这些文件的路径。这种方式存储比直接存储在数据库中简单,但是访问速度比存储在数据库中慢。
2、如何选择数据类型
1)整数类型和浮点数类型
整数类型和浮点数类型最大的区别在于能否表达小数。整数类型不能表示小数,而浮点数类型可以表示小数。不同的整数类型的取值范围不同。TINYINT类型的取值范围为0~255。如果字段的最大值不超过255,那选择TINYINT类型就足够了。BIGINT类型的取值范围最大。最常用的整数类型是INT类型。
浮点数类型包括FLOAT类型和 DOUBLE类型。DOUBLE类型的精度比FLOAT类型高。如果需要精确到小数点后10位以上,就应该选择DOUBLE类型,而不应该选择FLOAT类型。
2)浮点数类型和定点数类型
对于浮点数和定点数,当插入值的精度高于实际定义的精度时,系统会自动进行四舍五入处理。其目的是为了使该值的精度达到要求。浮点数进行四舍五入时系统不会报警,定点数会出现警告。
在未指定精度的情况下,浮点数和定点数有其默认的精度。FLOAT型和 DOUBLE型默认会保存实际精度。这个精度与操作系统和硬件的精度有关。DECIMAL型默认整数位为10,小数位为0,即默认为整数。
在 MySQL中,定点数精度比浮点数要高。而且,浮点数会出现误差。如果要对数据的精度要求比较高,应该选择定点数。
3)CHAR类型和VARCHAR类型
CHAR类型的长度是固定的,而VARCHAR类型的长度是在范围内可变的。因此,VARCHAR类型占用的空间比CHAR类型小。而且,VARCHAR类型比 CHAR类型灵活。对于长度变化比较大的字符串类型,最好是选择VARCHAR类型。
虽然CHAR类型占用的空间比较大,但是CHAR类型的处理速度比VARCHAR快。因此,对于长度变化不大和查询速度要求较高的字符串类型,最好选择CHAR类型。
4)时间和日期类型
YEAR类型只表示年份。如果只需要记录年份,选择YEAR类型可以节约空间。TIME类型只表示时间。如果只需要记录时间,选择TIME类型是最合适的。DATE类型只表示日期。如果只需要记录日期,选择DATE类型是最合适的。
如果需要记录日期和时间,可以选择 DATETIME类型和 TIMESTAMP类型。DATETIME类型表示的时间范围比 TIMESTAMP类型大。因此,若需要的时间范围比较大,选择DATETIME类型比较合适。TIMESTAMP类型的时间是根据时区来显示的。如果需要显示的时间与时区对应,那就应该选择TIMESTAMP类型。
5)ENUM类型和SET类型
ENUM类型最多可以有65535个成员,而SET类型最多只能包含64个成员。两者的取值只能在成员列表中选取。ENUM类型只能从成员中选择一个,而SET类型可以选择多个。
因此,对于多个值中选取一个的,可以选择ENUM类型。例如,“性别”字段就可以定义成ENUM类型,因为只能在“男”和“女”中选其中一个。对于可以选取多个值的字段,可以选择SET类型。例如,“爱好”字段就可以选择SET类型,因为可能有多种爱好。
6)TEXT类型和BLOB类型
TEXT类型与BLOB类型很类似。TEXT类型存储只能存储字符数据。而BLOB类型可以用于存储二进制数据。如果要存储文章等纯文本的数据,应该选择TEXT类型。如果需要存储图片等二进制的数据,应该选择BLOB类型。
TEXT类型包括TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。这4者最大的不同是内容的长度不同。TINYTEXT类型允许的长度最小,LONGTEXT类型允许的长度最大。BLOB类型也是如此。
3、 MySQL中什么数据类型能够储存路径?
MySQL中,CHAR、VARCHAR和TEXT等字符串类型都可以存储路径。但是,如果路径中使用“\\”符合时,这个符号会被过滤。解决的办法是,路径中用“”或“I”来代替“\\”。这样,MySQL就不会自动过滤路径的分隔字符,可以完整的表示路径。
4、MySQL中如何使用布尔类型?
在SQL标准中,存在 BOOL和 BOOLEAN类型。MySQL为了支持SQL标准,也是可以定义BOOL 和 BOOLEAN类型的。但是,BOOL和 BOOLEAN类型最后转换成的是TINYINT(1)。也就是说,在MySQL中,布尔类型等价于TINYINT(1)。因此,创建表的时候将一个字段定义成BOOL和BOOLEAN类型,数据库中真实定义的是TINYINT(1)。
5、MySQL中如何存储JPG图片和MP3音乐?
一般情况下,数据库中不直接存储图片和音频文件。而是存储图片和音频文件的路径。如果实在需要在 MySQL数据库中存储图片和音频文件,就选择BLOB类型。因为,BLOB类型可以用来存储二进制类型的文件。
MySQL数据库的数据类型
使用MySQL数据库存储数据时,不同的数据类型决定了 MySQL存储数据方式的不同。为此,MySQL数据库提供了多种数据类型,其中包括整数类型、浮点数类型、定点 数类型、日期和时间类型、字符串类型、二进制…等等数据类型。MySQL安装请参考:http://anzhuang.runbulls.com/
1.整数类型
根据数值取值范围的不同MySQL 中的整数类型可分为5种,分别是TINYINT、SMALUNT、MEDIUMINT、INT和 BIGINT。下图列举了 MySQL不同整数类型所对应的字节大小和取值范围而最常用的为INT类型的,
数据类型 字节数 无符号数的取值范围 有符号数的取值范围
TINYINT 1 0~255 -128~127
SMALLINT 2 0~65535 -32768~32768
MEDIUMINT 3 0~16777215 -8388608~8388608
INT 4 0~4294967295 -2147483648~ 2147483648
BIGINT 8 0~18446744073709551615 -9223372036854775808~9223372036854775808
2.浮点数类型和定点数类型
在MySQL数据库中使用浮点数和定点数来存储小数。浮点数的类型有两种:单精度浮点数类型(FLOAT)和双精度浮点数类型(DOUBLE)。而定点数类型只有一种即DECIMAL类型。下图列举了 MySQL中浮点数和定点数类型所对应的字节大小及其取值范围:
数据类型 字节数 有符号的取值范围 无符号的取值范围
FLOAT 4 -3.402823466E+38~-1.175494351E-38 0和1.175494351E-38~3.402823466E+38
DOUBLE 8 -1.7976931348623157E+308~2.2250738585072014E-308 0和2.2250738585072014E-308~1.7976931348623157E+308
DECIMAL(M,D) M+2 -1.7976931348623157E+308~2.2250738585072014E-308 0和2.2250738585072014E-308~1.7976931348623157E+308
从上图中可以看出:DECIMAL类型的取值范围与DOUBLE类型相同。但是,请注意:DECIMAL类型的有效取值范围是由M和D决定的。其中,M表示的是数据的长 度,D表示的是小数点后的长度。比如,将数据类型为DECIMAL(6,2)的数据6.5243 插人数据库后显示的结果为6.52
3.字符串类型
在MySQL中常用CHAR 和 VARCHAR 表示字符串。两者不同的是:VARCHAR存储可变长度的字符串。
当数据为CHAR(M)类型时,不管插入值的长度是实际是多少它所占用的存储空间都是M个字节;而VARCHAR(M)所对应的数据所占用的字节数为实际长度加1
插入值 CHAR(3) 存储需求 VARCHAR(3) 存储需求
‘’ ‘’ 3个字节 ‘’ 1个字节
‘a’ ‘a’ 3个字节 ‘a’ 2个字节
‘ab’ ‘ab’ 3个字节 ‘ab’ 3个字节
‘abc’ ‘ab’ 3个字节 ‘abc’ 4个字节
‘abcd’ ‘ab’ 3个字节 ‘abc’ 4字节
4.字符串类型
文本类型用于表示大文本数据,例如,文章内容、评论、详情等,它的类型分为如下4种:
数据类型 储存范围
TINYTEXT 0~255字节
TEXT 0~65535字节
MEDIUMTEXT 0~16777215字节
LONGTEXT 0~4294967295字节
5.日期与时间类型
MySQL提供的表示日期和时间的数据类型分别是 :YEAR、DATE、TIME、DATETIME 和 TIMESTAMP。下图列举了日期和时间数据类型所对应的字节数、取值范围、日期格式以及零值:
数据类型 字节数 取值范围 日期格式 零值
YEAR 1 1901~2155 YYYY 0000
DATE 4 1000-01-01~9999-12-31 YYYY-MM-DD 0000-00-00
TIME 3 -838:59:59~ 838:59:59 HH:MM:SS 00:00:00
DATETIME 8 1000-01-01 00:00:00~9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 0000-00-00 00:00:00
TIMESTAMP 4 1970-01-01 00:00:01~2038-01-19 03:14:07 YYYY-MM-DD HH:MM:SS 0000-00-00 00:00:00
5.1 YEAR类型
YEAR类型用于表示年份,在MySQL中,可以使用以下三种格式指定YEAR类型 的值。
1、使用4位字符串或数字表示,范围为’1901’—\'2155’或1901—2155。例如,输人 ‘2019’或2019插人到数据库中的值均为2019。
2、使用两位字符串表示,范围为’00’—‘99’。其中,‘00’—\'69’范围的值会被转换为 2000—2069范围的YEAR值,‘70’—\'99’范围的值会被转换为1970—1999范围的YEAR 值。例如,输人’19’插人到数据库中的值为2019。
3、使用两位数字表示,范围为1—99。其中,1—69范围的值会被转换为2001— 2069范围的YEAR值,70—99范围的值会被转换为1970—1999范围的YEAR值。例 如,输人19插入到数据库中的值为2019。
请注意:当使用YEAR类型时,一定要区分’0’和0。因为字符串格式的’0’表示的YEAR值是2000而数字格式的0表示的YEAR值是0000。
5.2 TIME类型
TIME类型用于表示时间值,它的显示形式一般为HH:MM:SS,其中,HH表示小时, MM表示分,SS表示秒。在MySQL中,可以使用以下3种格式指定TIME类型的值。
1、以’D HH:MM:SS’字符串格式表示。其中,D表示日可取0—34之间的值, 插人数据时,小时的值等于(DX24+HH)。例如,输入’2 11:30:50’插人数据库中的日期为59:30:50。
2、以’HHMMSS’字符串格式或者HHMMSS数字格式表示。 例如,输人’115454’或115454,插入数据库中的日期为11:54:54
3、使用CURRENT_TIME或NOW()输人当前系统时间。
5.3 DATETIME类型
DATETIME类型用于表示日期和时间,它的显示形式为’YYYY-MM-DD HH: MM:SS’,其中,YYYY表示年,MM表示月,DD表示日,HH表示小时,MM表示分,SS 表示秒。在MySQL中,可以使用以下4种格式指定DATETIME类型的值。
以’YYYY-MM-DD HH:MM:SS’或者’YYYYMMDDHHMMSS’字符串格式表示的日期和时间,取值范围为’1000-01-01 00:00:00’—‘9999-12-3 23:59:59’。例如,输人’2019-01-22 09:01:23’或 ‘20140122_0_90123’插人数据库中的 DATETIME 值都为 2019-01-22 09:01:23。
1、以’YY-MM-DD HH:MM:SS’或者’YYMMDDHHMMSS’字符串格式表示的日期和时间,其中YY表示年,取值范围为’00’—‘99’。与DATE类型中的YY相同,‘00’— \'69’范围的值会被转换为2000—2069范围的值,‘70’—\'99’范围的值会被转换为1970—1999范围的值。
2、以YYYYMMDDHHMMSS或者YYMMDDHHMMSS数字格式表示的日期 和时间。例如,插入20190122090123或者190122090123,插人数据库中的DATETIME值都 为 2019-01-22 09:01:23。
3、使用NOW来输人当前系统的日期和时间。
5.4 TIMESTAMP类型
TIMESTAMP类型用于表示日期和时间,它的显示形式与DATETIME相同但取值范围比DATETIME小。在此,介绍几种TIMESTAMP类型与DATATIME类型不同的形式:
1、使用CURRENT_TIMESTAMP输人系统当前日期和时间。
2、输人NULL时系统会输人系统当前日期和时间。
3、无任何输人时系统会输入系统当前日期和时间。
6.二进制类型
在MySQL中常用BLOB存储二进制类型的数据,例如:图片、PDF文档等。BLOB类型分为如下四种:
数据类型 储存范围
TINYBLOB 0~255字节
BLOB 0~65535字节
MEDIUMBLOB 0~16777215字节
LONGBLOB 0~4294967295字节
以上是关于MySQl数据类型的主要内容,如果未能解决你的问题,请参考以下文章