MySql数据库的列类型(字段类型).docx

上传人:scccc 文档编号:14424443 上传时间:2022-02-05 格式:DOCX 页数:11 大小:21.42KB
返回 下载 相关 举报
MySql数据库的列类型(字段类型).docx_第1页
第1页 / 共11页
MySql数据库的列类型(字段类型).docx_第2页
第2页 / 共11页
MySql数据库的列类型(字段类型).docx_第3页
第3页 / 共11页
MySql数据库的列类型(字段类型).docx_第4页
第4页 / 共11页
MySql数据库的列类型(字段类型).docx_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《MySql数据库的列类型(字段类型).docx》由会员分享,可在线阅读,更多相关《MySql数据库的列类型(字段类型).docx(11页珍藏版)》请在三一文库上搜索。

1、MySql 数据库的列类型(字段类型)MySQL数据库的表是一个二维表,由一个或多个数据列构成。每个数据列都有它的特定类型,该类型决定了 MySQL如何看待该列数据, 我们可以把整型数值存放到字符类型的列中, MySQL则会把它看成字符串来处 理。MySQL中的列类型有三种:数值类、字符串类和日期 / 时间类。从大类来看列类型和数值类型一样,都是只有三种。但每种列类型都还可细分。下面对各种列类型进行详细介绍。数值类的数据列类型数值型的列类型包括整型和浮点型两大类。TINYINT: 1 字节非常小的正整数,带符号:-128127,不带符号:0255SMALLINT: 2字节小整数,带符号:-32

2、76832767,不带符号:065535MEDIUMINT: 3字节中等大小的整数,带符号:- ,不带符号:0INT: 4 字节标准整数,带符号:- 4847,不带符号:095BIGINT: 8字节大整数,带符号:- 808807,不带符号: 01615FLOAT: 4 字节单精度浮点数,最小非零值:1.1E-38,最大非零值: +-3.6E+38DOUBLE: 8 字节双精度浮点数,最小非零值: +-2.072014E-308,最大非零值:+-1.E+308DECIMAL:M+2 字节以字符串形式表示的浮点数,它的取值范围可变,由 M 和 D 的值 决定。整型数据列类型MySQL有五种整型数

3、据列类型,即 TINYINT SMALLINT MEDIUMINT, INT 和 BIGINT。它们之间的区别是取值范围不同,存储空间也各不相同。在整型数据列后加上UNSIGNED!性可以禁止负数,取值从0开始。声明整型数据列时,我们可以为它指定个显示宽度M(1255),如INT(5),指定显示宽度为5个字符,如果没有给它指定显示宽度,MySQL会为它 指定一个默认值。显示宽度只用于显示,并不能限制取值范围和占用空间, 如:INT(3)会占用 4 个字节的存储空间,并且允许的最大值也不会是999,而是INT整型所允许的最大值。浮点型数据列类型MySQL有三种浮点型数据列类型,分别是:FLOAT

4、 DOUBLED DECIMAL浮点类数据类型有一个最大可表示值和一个最小非零可表示值,最小非零可表示值决定了该类型的精确度。 MySQL4.0.2版之后,FLOATS DOUBLE可以指定UNSIGNED!性。当指定该属性时,取值范围不平移到正数区间,而只是简单地把浮点类型的负数部份去掉。浮点类型也有M(1255)和D(13Q且不能大于M-2)。分别表示显示宽度和 小数位数。M和D在FLOATS口 DOUBL可是可选的,默认,当 MySQL版本大于3.23.6时,FLOATS口 DOUBL嘿型将被保存为硬件所支持的最大精度。DECIMAL!勺 M 和 D值在 MySQL3.23.6后可选,默

5、认D值为0,M值为10。如何选择数值类数据列类型?为了节省存储空间和提高数据库处理效率,我们应根据应用数据的取值范围来选择一个最适合的数据列类型。如果把一个超出数据列取值范围的数存入该列,则MySQL就会截短该值,如:我们把 999 存入 SMALLINT(3)数据列里,因为 SMALLINT(3)的取值范围是-3276832767,所以就会被截短成32767 存储。显示宽度3不会影响数值的存储。只影响显示。对于浮点数据列,存入的数值会被该列定义的小数位进行四舍五入。如把1.234 存入 FLOAT(6.1)数据xx,结果是1.2。DECIMAL FLOATS口 DOUBLE勺区另fj是:DE

6、CIMAL类型的值是以字符串的形式被储存起来的,它的小数位数是固定 的。它的优点是,不会象 FLOATS口 DOUBL段型数据列那样进行四舍五入而产 生误差,所以很适合用于财务计算;而它的缺点是:由于它的存储格式不同,CPU不能对它进行直接运算,从而影响运算效 率。DECIMAL(M D)总共要占用 M+2个字节。数值类数据列的属性ZEROFIL属性适用于所有数值类数据列类型,作用是,如果数值的宽度小 于定义的显示宽度,则在数值前填充0。UNSIGNED!性不允许数据列出现负数。AUTO_INCREMEN属性可生成独一无二的数字序列。只对整数类的数据列 有效。NULL和NOT NULLS性设置

7、数据列是否可为空。DEFAULTS性可为数据列指定默认值。/字符串类数据列类型字符串可以用来表示任何一种值,所以它是最基本的类型之一。我们可以用字符串类型来存储图象或声音之类的二进制数据,也可存储用gzip压缩的数据。下表介绍了各种字符串类型:CHAR(M)M 字节VARCHAR(M)M字节 L+1 字节TINYBLOD TINYTEXT2八8-俘节 L+1 字节BLOR TEXT2八16-1 字节 L+2MEDIUMBLOB MEDIUMTEXT2八24卡节 L+3LONGBLOB LONGTEXT2八32-字节 L+4ENUM(value1,value2,.)65535个成员1 或 2字节

8、SET(value1,value2,.)64个成员1,2,3,4或 8 字节L+1、L+2是表示数据列是可变长度的,它占用的空间会根据数据行的增减面则改变。数据行的总长度取决于存放在这些数据列里的数据值的长度。 L+1 或L+2里多出来的字节是用来保存数据值的长度的。在对长度可变的数据进行处理 时,MySQL要把数据内容和数据长度都保存起来。如果把超出字符串最大长度的数据放到字符类数据列中,MySQL会自动进行截短处理。ENUM和SET类型的数据列定义里有一个列表,列表里的元素就是该数据列的合法取值。如果试图把一个没有在列表里的值放到数据列里,它会被转换为空字符串( “”) 。字符串类型的值被

9、保存为一组连续的字节序列,并会根据它们容纳的是二进制字符串还是非二进制字符而被区别对待为字节或者字符:二进制字符串被视为一个连续的字节序列,与字符集无关。MySQL把BLOB数据列和带BINARY!性的CHA前口 VARCHA嗽据列里的数据当作二进制值。非二进制字符串被视为一个连续排列的字符序列。与字符集有关。 MySQL把TEXTiJ与不带BINARY!性的CHA书口 VARCHA徽据列里的数据当作二进制 值对待。在 MySQL4.1 以后的版本中,不同的数据列可以使用不同的字符集。在MySQL4.1版本以前,MySQL用服务器的字符集作为默认字符集。非二进制字符串,即我们通常所说的字符串,

10、是按字符在字符集中先后次序进行比较和排序的。而二进制字符串因为与字符集无关,所以不以字符顺序排序,而是以字节的二进制值作为比较和排序的依据。下面介绍两种字符串的比较方式:二进制字符串的比较方式是一个字节进行的,比较的依据是两个字节的二进制值。也就是说它是区分大小写的,因为同一个字母的大小写的数值编码是不一样的。非二进制字符串的比较方式是一个字符进行的,比较的依据是两个字符在字符集中的先后顺序。在大多数字符集中,同一个字母的大小写往往有着相同的先后顺序,所以它不区分大小写。二进制字符串与字符集无关,所以无论按字符计算还是按字节计算,二进制字符串的长度都是一样的。所以 VARCHAR(20)并不表

11、示它最多能容纳 20个字符,而是表示它最多只能容纳可以用 20个字节表示出来的字符。对于单字节字符集,每个字符只占用一个字节,所以这两者的长度是一样的,但对于多字节字符集,它能容纳的字符个数肯定少于20 个。CHA前口 VARCHARCHAR和VARCHA思最常用的两种字符串类型,它们之间的区别是:CHAR是固定长度的,每个值占用相同的字节,不够的位数MySQL会在它的右边用空格字符补足VARCHA提一种可变长度的类型,每个值占用其刚好的字节数再加上一个用来记录其长度的字节即 L+1 字节。CHAR(0)和 VARCHAR(0)都是合法的。VARCHAR(0)是从 MySQL4.0.2 版开始

12、的。它们的作用是作为占位符或用来表示各种 on/off 开关值。如何选择CHA书口 VARCHAR这里给出两个原则:如果数据都有相同的长度,选用 VARCHA也多占用空间,因为有一位用来 存储其长度。如果数据长短不一,选用 VARCHAR节省存储空间。而CHAM论字符长 短都需占用相同的空间,即使是空值也不例外。如果长度出入不大,而且是使用 MylSAM或ISAM类型的表,则用CHAF 比VARCHAR子,因为MylSAM和ISAM类型的表对处理固定长度的行的效率 高。在一个数据表里,只要有一个数据列的长度是可变的,则所有数据列的长度将是可变的。MySQL会进行自动地转换。一个例外,CHA张度

13、小于4的不会进行自动转 换,因为MySQL会认为这样做没必要,节省不了多少空间。反而 MySQL会把大 量长度小的VARCHAR专换成CHAFR以减少空间占用量。BLOB和 TEXTBLOB是二进制字符串,TEXT是非二进制字符串。两者都可存放大容量的信有关BLOB和TEXTxX勺建立:BDB表类型和 MySQL3.23.2以上版本的MylSAM表类型允许在BLOB和TEX傲据歹U上建立索 引。ISAM、HEA可口 InnoDB表不支持大对象列的索引。使用BLOB和TEXT应注意的问题:由于这两个列类型所存储的数据量大,所以删除和修改操作容易在数据表里产生大量的碎片,需定期运行 OPTIMIZ

14、E TABLE减少碎片和提高性能。如果 使用的值非常巨大,就需对服务器进行相应的优化调整,增加max_allowed_packet 参数的值。对那些可会用到变些巨大数据的客户程序,也 需加大它们的数据包大小。ENUM 和 SETENUM和SETB是比较特殊的字符串数据列类型,它们的取值范围是一个 预先定义好的列表。ENUM或SET数据列的取值只能从这个列表中进行选择。 ENUM和SE硒主要区另U是:ENUM 只能取单值,它的数据列表是一个枚举集合。它的合法取值列表最 多允许有 65535个成员。例如:ENUM(N,Y)表示,该数据列的取值要么是Y,要么就是N。SETW取多值。它的合法取值列表最

15、多允许有64个成员。空字符串也是一个合法的SET直。ENUM和SET的值是以字符串形式出现的,但在内部,MySQL以数值的形 式存储它们。ENUM 的合法取值列表中的字符串被按声明定义的顺序被编号,从1 开始。SET的编号不是按顺序进行编号的,SET中每一个合法取值都对应着SET直 里的一个位。第一个合法取值对应 0 位,第二个合法取值对应 1 位,以此类推,如果数值形式的SET直等于0,则说明它是一个空字符串,如果某个合法的取值出现在SE傲据列里,与之对应的位就会被置位;如果某个合法的取值没有出现在SET数据列里,与之对应的位就会被清零。正因为SET直与位有这样的对应关系,所以SETt据列的

16、多个合法取值才能同时出现并构成SET直。字符串类型数据列的字符集属性在 MySQL4.1 以前的版本,字符串数据列的字符集由服务器的字符决定, MySQL4.1 版以后的版本可对每个字符串数据列指定不同的字符串。如果按默认方式设置,可按数据列、数据表、数据库、服务器的顺序关联字符串的字符集, 直到找一个明确定义的字符集。/日期 ,时间型数据列类型DATE1000-01-0199-12-31 3字节 (MySQL3.23版以前是 4字节 ) 00-00-00TIME-838:59:59838:59:59 3字节 00:00:00DATETIME1000-01-01 00:00:0099-12-3

17、1 23:59:59 字节8 00-00-0000:00:00TIMESTAMP0203浑的某个时刻4字节YEAR(4): 19012155 YEAR(2): 19702069 1字节 00MySQL总是把日期和日期里的年份放在最前面,按 年月日的顺序 显示。DATE、 TIME、DATIME数据列类型DATE、TIME和DATIME类型分别存放日期值、时间值、日期和时间值的组合。 它们的格式分别是“CCY-MYM-DD” 、 “hh:mm:ss ”、 “ CCY-MYM-DDhh:mm:ss ”。DATIME里的时间值和TIME值是有区别的,DATIME里的时间值代表的是几 点几分,TIME

18、值代表的是所花费的时间。当向 TIME数据列插值时,需用时间 的完整写法,如 12分 30秒要写成“00:12:30。”TIMESTAM暧据列类型TIMESTAM暧据列的格式是 CCYYMMDDhhmmss取值范围从0开始,即1970 年 1 月 1 号,最大到 2037 年。它的特点是能把数据行的创建或修改 时间记录下来:如果把一个NULL值插入TIMESTAMPS,这个数据列就将自动取值为当前 的日期和时间。在创建和修改数据行时,如果没有明确对 TIMESTAM暇据列进行赋值,则 它就会自动取值为当前的日期和时间。如果行中有多个 TIMESTAMPS,只有第 一个会自动取值。如果对TIME

19、STAM浅置一个确定的日期和时间值,则会使 TIMESTAMP勺 自动取值功能失效。10 / 11TIMESTAM部认的列宽是14,可指定列宽,以改变显示效果。但不论你指定 的列宽如何,MySQL者B是以4字节来存储TIMESTAMP直,也总是以14位精度 来计算。如果需要把创建时间和最近一次修改时间同时记录下来,可以用两个时间戳来记录,一个记录创建时间,一个记录修改时间。不过需记住两件事,一是要把记录修改时间的TIMESTAM暇据列放在最前面,这样才会自动取值;二是 创建一条新记录时,要用now()函数来初始化创建时间TIMESTAM暇据列,这 样,该TIMESTAM吸据列就不会再变化。YEARYEARM一种单字节的数据列类型,YEAR(4)的取值范围是19012155,YEAR(2)的取值范围是19702069但只显示最后两位数。MySQL能自动把两位数 字年份转换成四位数字的年份,如 97和 14分被转换成1997和 2014。转换规则是这样的:年份值0069 将被转换成20002069;年份值7099 将被转换成19701999。00被转换成00,而不是2000。因为数值00也就是0,而0值是YEAR勺一个 合法取值11 / 11

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1