设为首页
收藏本站
最新电影
> 子栏目 Asp | Jsp | XML | XSL | Div+Css | 自定义函数 | 数据库 | 脚本特效
您现在的位置: 首页=>后台技术=>数据库 订阅本栏目  
MySql数据库的列类型(字段类型)
时间: 2010-07-22 23:02:24 阅读次数:3399


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

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~9233372036854775807,不带符号:
0~18446744073709551615
FLOAT
4字节 单精度浮点数,最小非零值:+-1.175494351E-38,最大非零值:
+-3.402823466E+38
DOUBLE
8字节 双精度浮点数,最小非零值:+-2.2250738585072014E-308,最大非零值:
+-1.7976931348623157E+308
DECIMAL
M+2字节 以字符串形式表示的浮点数,它的取值范围可变,由MD的值决定


整型数据列类型


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

MySQL
有三种浮点型数据列类型,分别是:FLOATDOUBLEDECIMAL浮点类数据类型有一个最大可表示值和一个最小非零可表示值,最小非零可表示值决定了该类型的精确度

MySQL 4.0.2
版之后,FLOATDOUBLE都可以指定UNSIGNED属性当指定该属性时,取值范围不平移到正数区间,而只是简单地把浮点类型的负数部份去掉浮点类型也有M(1~255)D(1~30,且不能大于M-2)分别表示显示宽度和小数位数MDFLOATDOUBLE中是可选的,默认,当MySQL版本大于3.23.6时,FLOATDOUBLE类型将被保存为硬件所支持的最大精度DECIMALMD值在MySQL3.23.6后可选,默认D值为0,M值为10

如何选择数值类数据列类型?
为了节省存储空间和提高数据库处理效率,我们应根据应用数据的取值范围来选择一个最适合的数据列类型如果把一个超出数据列取值范围的数存入该列,则MySQL就会截短该值,如:我们把99999存入SMALLINT(3)数据列里,因为SMALLINT(3)的取值范围是-32768~32767,所以就会被截短成32767存储显示宽度3不会影响数值的存储只影响显示对于浮点数据列,存入的数值会被该列定义的小数位进行四舍五入如把一个1.234存入FLOAT(6.1)数据列中,结果是1.2DECIMALFLOATDOUBLE的区别是:DECIMAL类型的值是以字符串的形式被储存起来的,它的小数位数是固定的它的优点是,不会象FLOATDOUBLE类型数据列那样进行四舍五入而产生误差,所以很适合用于财务计算;而它的缺点是:由于它的存储格式不同,CPU不能对它进行直接运算,从而影响运算效率DECIMAL(MD)总共要占用M+2个字节数值类数据列的属性
ZEROFILL
属性适用于所有数值类数据列类型,作用是,如果数值的宽度小于定义的显示宽度,则在数值前填充0
UNSIGNED
属性不允许数据列出现负数
AUTO_INCREMENT
属性可生成独一无二的数字序列只对整数类的数据列有效
NULL
NOT NULL属性设置数据列是否可为空
DEFAULT
属性可为数据列指定默认值

//////////////////////////////////////////////////////

字符串类数据列类型字符串可以用来表示任何一种值,所以它是最基本的类型之一我们可以用字符串类型来存储图象或声音之类的二进制数据,也可存储用gzip压缩的数据下表介绍了各种字符串类型:

CHAR[(M)] M
字节 M字节
VARCHAR[(M)] M
字节 L+1字节

TINYBLOD
TINYTEXT 2^8-1字节 L+1字节

BLOB
TEXT 2^16-1字节
L+2
MEDIUMBLOB
MEDIUMTEXT 2^24-1字节
L+3
LONGBLOB
LONGTEXT 2^32-1字节
L+4
ENUM('value1','value2',...) 65535
个成员 12字节

SET('value1','value2',...) 64
个成员 1,2,3,48字节


L+1
L+2是表示数据列是可变长度的,它占用的空间会根据数据行的增减面则改变数据行的总长度取决于存放在这些数据列里的数据值的长度L+1L+2里多出来的字节是用来保存数据值的长度的在对长度可变的数据进行处理时,MySQL要把数据内容和数据长度都保存起来
如果把超出字符串最大长度的数据放到字符类数据列中,MySQL会自动进行截短处理

ENUM
SET类型的数据列定义里有一个列表,列表里的元素就是该数据列的合法取值如果试图把一个没有在列表里的值放到数据列里,它会被转换为空字符串(“”)字符串类型的值被保存为一组连续的字节序列,并会根据它们容纳的是二进制字符串还是非二进制字符而被区别对待为字节或者字符:二进制字符串被视为一个连续的字节序列,与字符集无关MySQLBLOB数据列和带BINARY属性的CHARVARCHAR数据列里的数据当作二进制值非二进制字符串被视为一个连续排列的字符序列与字符集有关MySQLTEXT列与不带BINARY属性的CHARVARCHAR数据列里的数据当作二进制值对待MySQL4.1以后的版本中,不同的数据列可以使用不同的字符集MySQL4.1版本以前,MySQL用服务器的字符集作为默认字符集非二进制字符串,即我们通常所说的字符串,是按字符在字符集中先后次序进行比较和排序的而二进制字符串因为与字符集无关,所以不以字符顺序排序,而是以字节的二进制值作为比较和排序的依据下面介绍两种字符串的比较方式:二进制字符串的比较方式是一个字节一个字节进行的,比较的依据是两个字节的二进制值也就是说它是区分大小写的,因为同一个字母的大小写的数值编码是不一样的非二进制字符串的比较方式是一个字符一个字符进行的,比较的依据是两个字符在字符集中的先后顺序在大多数字符集中,同一个字母的大小写往往有着相同的先后顺序,所以它不区分大小写二进制字符串与字符集无关,所以无论按字符计算还是按字节计算,二进制字符串的长度都是一样的所以VARCHAR(20)并不表示它最多能容纳20个字符,而是表示它最多只能容纳可以用20个字节表示出来的字符对于单字节字符集,每个字符只占用一个字节,所以这两者的长度是一样的,但对于多字节字符集,它能容纳的字符个数肯定少于20

CHAR
VARCHAR

CHAR
VARCHAR是最常用的两种字符串类型,它们之间的区别是:

CHAR
是固定长度的,每个值占用相同的字节,不够的位数MySQL会在它的右边用空格字符补足

VARCHAR
是一种可变长度的类型,每个值占用其刚好的字节数再加上一个用来记录其长度的字节即L+1字节

CHAR(0)
VARCHAR(0)都是合法的VARCHAR(0)是从MySQL4.0.2版开始的它们的作用是作为占位符或用来表示各种on/off开关值如何选择CHARVARCHAR,这里给出两个原则:如果数据都有相同的长度,选用VARCHAR会多占用空间,因为有一位用来存储其长度如果数据长短不一,选用VARCHAR能节省存储空间CHAR不论字符长短都需占用相同的空间,即使是空值也不例外如果长度出入不大,而且是使用MyISAMISAM类型的表,则用CHAR会比VARCHAR好,因为MyISAMISAM类型的表对处理固定长度的行的效率高

在一个数据表里,只要有一个数据列的长度是可变的,则所有数据列的长度将是可变的MySQL会进行自动地转换一个例外,CHAR长度小于4的不会进行自动转换,因为MySQL会认为这样做没必要,节省不了多少空间反而MySQL会把大量长度小的VARCHAR转换成CHAR,以减少空间占用量

BLOB
TEXT


BLOB
是二进制字符串,TEXT是非二进制字符串飞飞Asp技~术乐园两者都可存放大容量的信息有关BLOBTEXT索引的建立:

BDB
表类型和MySQL3.23.2以上版本的MyISAM表类型允许在BLOBTEXT数据列上建立索引

ISAM
HEAPInnoDB表不支持大对象列的索引使用BLOBTEXT应注意的问题:由于这两个列类型所存储的数据量大,所以删除和修改操作容易在数据表里产生大量的碎片,需定期运行OPTIMIZE TABLE以减少碎片和提高性能如果使用的值非常巨大,就需对服务器进行相应的优化调整,增加max_allowed_packet参数的值对那些可会用到变些巨大数据的客户程序,也需加大它们的数据包大小ENUMSET
ENUM
SET都是比较特殊的字符串数据列类型,它们的取值范围是一个预先定义好的列表ENUMSET数据列的取值只能从这个列表中进行选择ENUMSET的主要区别是:

ENUM
只能取单值,它的数据列表是一个枚举集合它的合法取值列表最多允许有65535个成员例如:ENUM("N","Y")表示,该数据列的取值要么是"Y",要么就是"N"

SET
可取多值它的合法取值列表最多允许有64个成员空字符串也是一个合法的SET

ENUM
SET的值是以字符串形式出现的,但在内部,MySQL以数值的形式存储它们

ENUM
的合法取值列表中的字符串被按声明定义的顺序被编号,从1开始

SET
的编号不是按顺序进行编号的,SET中每一个合法取值都对应着SET值里的一个位第一个合法取值对应0位,第二个合法取值对应1位,以此类推,如果数值形式的SET值等于0,则说明它是一个空字符串,如果某个合法的取值出现在SET数据列里,与之对应的位就会被置位;如果某个合法的取值没有出现在SET数据列里,与之对应的位就会被清零正因为SET值与位有这样的对应关系,所以SET数据列的多个合法取值才能同时出现并构成SET字符串类型数据列的字符集属性MySQL 4.1以前的版本,字符串数据列的字符集由服务器的字符决定,MySQL 4.1版以后的版本可对每个字符串数据列指定不同的字符串如果按默认方式设置,可按数据列、数据表、数据库、服务器的顺序关联字符串的字符集,直到找一个明确定义的字符集

/////////////////////////////////////////////////////////

日期,时间型数据列类型

DATE 1000-01-01~9999-12-31 3
字节(MySQL3.23版以前是4字节 ) 0000-00-00
TIME -838:59:59~838:59:59 3
字节
00:00:00
DATETIME 1000-01-01 00:00:00~9999-12-31 23:59:59 8
字节
0000-00-00 00:00:00
TIMESTAMP 19700101000000~2037
年的某个时刻 4字节
00000000000000
YEAR YEAR(4)
1901~2155 YEAR(2)1970~2069 1字节
0000

MySQL
总是把日期和日期里的年份放在最前面,按年月日的顺序显示


DATE
TIMEDATATIME数据列类型

DATE
TIMEDATATIME类型分别存放日期值、时间值、日期和时间值的组合它们的格式分别是“CCYY-MM-DD”“hh:mm:ss”“CCYY-MM-DD hh:mm:ss”

DATATIME
里的时间值和TIME值是有区别的,DATATIME里的时间值代表的是几点几分,TIME值代表的是所花费的时间当向TIME数据列插值时,需用时间的完整写法,如1230秒要写成“00:12:30”

TIMESTAMP
数据列类型

TIMESTAMP
数据列的格式是CCYYMMDDhhmmss,取值范围从19700101000000开始,即197011号,最大到2037飞飞,Asp技术乐园它的特点是能把数据行的创建或修改时间记录下来:如果把一个NULL值插入TIMESTAMP列,这个数据列就将自动取值为当前的日期和时间在创建和修改数据行时,如果没有明确对TIMESTAMP数据列进行赋值,则它就会自动取值为当前的日期和时间如果行中有多个TIMESTAMP列,只有第一个会自动取值如果对TIMESTAMP设置一个确定的日期和时间值,则会使TIMESTAMP的自动取值功能失效

TIMESTAMP
默认的列宽是14,可指定列宽,以改变显示效果但不论你指定的列宽如何,MySQL都是以4字节来存储TIMESTAMP值,也总是以14位精度来计算如果需要把创建时间和最近一次修改时间同时记录下来,可以用两个时间戳来记录,一个记录创建时间,一个记录修改时间不过需记住两件事,一是要把记录修改时间的TIMESTAMP数据列放在最前面,这样才会自动取值;二是创建一条新记录时,要用now()函数来初始化创建时间TIMESTAMP数据列,这样,该TIMESTAMP数据列就不会再变化

YEAR

YEAR
是一种单字节的数据列类型,YEAR(4)的取值范围是1901~2155,YEAR(2)的取值范围是1970~2069,但只显示最后两位数MySQL能自动把两位数字年份转换成四位数字的年份,如9714分被转换成19972014转换规则是这样的:年份值00~69将被转换成2000~2069年份值70~99将被转换成1970~1999

00
被转换成0000,而不是2000因为数值00也就是0,0值是YEAR的一个合法取值



本站下载资源全部放在fs2you共享空间上,若不能正常下载以上资源,请下载修复补丁
下载"MySql数据库的列类型(字段类型)"Word版
点击下载
站内搜索    

下一篇Microsoft SQL Server 2005 Service Pack 3(sqlserver2005 sp3)微软官方下载地址

上一篇数据类型详解 MSSQL

本栏目最新 栏目最新列表
access由于您和其他用户试图同时改变同一数
Microsoft SQL Server 2005 Service Pack 3
MySQL时间戳转换的方法
清除,删除表中数据的方法
mysql常用时间函数用法解释
网站优化策划 栏目最新列表
增加网站外链的快速方法
网站上线前必做的30个检查
新的友情链接参考标准(没有google的PR情况
优化Google的AdSense广告的五个工具
王通讲SEO八大基础
站点最新 站点最新列表
微博推广的一些技巧
xhEditor v1.1.7 发布,
收集的一些轻量级非常实
50个新鲜兼容最新版本的
javascript中cookie的设
Excel中出现#VALUE!、#D
jquery插件:飞飞表情插件
十个使用HTML5开发的精彩
支持HTML5的浏览器有哪些
飞妮莫属:漫画:如何写出
历史最热10条信息  
MIME介绍 及 [1] [2] [3]
巧用Google和迅雷来下载
VIA Rhine II Fast Ethe
Transact SQL 常 [1] [2]
电脑常用端 [1] [2] [3]
十道羊皮卷 欣赏+mp3版+
Do you get a kick out
每日一句:A friend and
每日一句:Theres no tu
网站开发常用手册
相关专题 相关专题列表
MySQL时间戳转换的方法
mysql常用时间函数用法解
MySql数据库的列类型(字
MySQL Order By Rand()效
mysql中的top,limit的用
启动/停止/重启MySQL 的
mysql错误Duplicate ent
重启mysql的几种方法
mysql出现data too long
phpmysql导入超过2M的数
 width= 
伟哥博客 西安房产 123最新电影 三四六四