MySQL金典培训教程 显示的宽度,用括号跟在基本关键词之后(例如,INT(4))。这个可选的宽度指定被用于其宽度小于列指定宽度的值得左填补显示,但是不限制能在列中被存储的值的范围;如果某个特定值的可打印表示需要不止 M 个字符,则显示完全的值;不会将值截断以适合 M 个字符。当与可选的扩展属性ZEROFILL一起使用时,缺省的空格填补用零代替。例如,对于声明为INT(5) ZEROFILL的列,一个为4的值作为00004被检索。如果定义了一个没有明确宽度的整数列,将会自动分配给它一个缺省的宽度。缺省值为每种类型的“最长”值的长度。
我们可以这样知道M和D的缺省值。先创建一个表 CREATE TABLE number ( )
然后显示这个表的结构 DESCRIBE number
在MySQL3.23上的结果如下:
+----------+-----------------------+ | Field | Type | +----------+-----------------------+ | tiny | tinyint(4) | | u_tiny | tinyint(3) unsigned | | small | smallint(6) | | u_small | smallint(5) unsigned | | medium | mediumint(9) | | u_medium | mediumint(8) unsigned | | num | int(11) | | u_num | int(10) unsigned | | big | bigint(20) | | u_big | bigint(20) unsigned | +----------+-----------------------+
tiny TINYINT,u_tiny TINYINT UNSIGNED, small SMALLINT,u_small SMALLINT UNSIGNED, medium MEDIUMINT,u_medium MEDIUMINT UNSIGNED, num INT,u_num INT UNSIGNED, big BIGINT,u_big BIGINT UNSIGNED
1.4.3.2浮点数类型 MySQL支持所有的ANSI/ISO SQL92的浮点数字类型。这些类型包括准确数字的数据类型(NUMERIC, DECIMAL),也包括近似数字的数据类型(FLOAT, REAL,和DOUBLE PRECISION)。关键词DEC是DECIMAL一个同义词: FLOAT[(M,D)] [ZEROFILL]
16 http://www.yurennet.com MySQL入门及初步 取值范围:-3.402823466E+38到-1.175494351E-38,0 和1.175494351E-38到3.402823466E+38 存储要求:4个字节
DOUBLE[(M,D)] [ZEROFILL]、DOUBLE PRECISION[(M,D)] [ZEROFILL]
取值范围:-1.7976931348623157E+308到-2.2250738585072014E-308、 0和2.2250738585072014E-308到1.7976931348623157E+308 存储要求:8个字节
DECIMAL(M[,D]) [ZEROFILL]、NUMERIC(M[, D]) [ZEROFILL] 取值范围:实际的范围可以通过M和D的选择被限制
存储要求:M字节(低于3.23版本)M+2字节(3.23或更高版本)
NUMERIC和DECIMAL类型
表1-6 M和D对DECIMAL类型取值范围的影响
类 型 说 明 DECIMAL(4, 1) DECIMAL(5, 1) DECIMAL(6, 1) DECIMAL(6, 2) DECIMAL(6, 3) 取值范围(MySQL < 3.23) -9.9 到 99.9 -99.9 到 999.9 -999.9 到 9999.9 -99.99 到 999.99 -9.999 到 99.999 取值范围(MySQL * 3.23) -999.9 到 9999.9 -9999.9 到 99999.9 -99999.9 到 999999.9 -9999.99 到 99999.99 -999.999 到 9999.999 1
给定的 DECIMAL 类型的取值范围取决于MySQL 的版本。
对于 MySQL 3.23 以前的版本,DECIMAL(M, D) 列的每个值占用 M 字节,而符号(如果需要)和小数点包括在 M 字节中。因此,类型为 DECIMAL(5,2) 的列,其取值范围为 -9.99 到 99.99,因为它们覆盖了所有可能的 5 个字符的值。
对于MySQL 3.23,DECIMAL 值是根据 ANSI 规范进行处理的,ANSI 规范规定 DECIMAL(M, D) 必须能够表示 M 位数字及 D 位小数的任何值。例如,DECIMAL(5, 2) 必须能够表示从 -999.99 到 999.99 的所有值。而且必须存储符号和小数点,因此自 MySQL 3.23 以来 DECIMAL 值占 M + 2 个字节。对于 DECIMAL(5, 2),“最长”的值(-999.99)需要 7 个字节。在正取值范围的一端,不需要正号,因此 MySQL 利用它扩充了取值范围,使其超过了 ANSI 所规范所要求的取值范围。如 DECIMAL(5, 2) 的最大值为 9999.99,因为有 7 个字节可用。
简而言之,在MySQL 3.23 及以后的版本中,DECIMAL(M, D) 的取值范围等于更早版本中的 DECIMAL(M + 2, D) 的取值范围。
1.4.4 日期和时间类型 http://www.yurennet.com 17
MySQL金典培训教程 MySQL提供几种时间和日期类型,包括日期和时间类型是DATETIME、DATE、TIMESTAMP、TIME和YEAR。对这几种时间和日期类型概述如下: DATA
取值范围:“1000-01-01”到“9999-12-31” 存储需求:3字节 TIME
取值范围:“-838:59:59”到“838:59:59” 存储需求:3字节 DATATIME
取值范围:“1000-01-01 00:00:00”到“9999-12-31 23:59:59” 存储需求:8字节 TIMESTAMP[(M)]
取值范围:“19700101000000”到2037年的某个时刻 存储需求:4字节 YEAR[(M)]
取值范围:1901到2155 存储需求:1字节
1.4.4.1 Y2K问题和日期类型 MySQL本身Y2K安全的,但是呈交给MySQL的输入值可能不是。一个包含2位年份值的任何输入是由二义性的,因为世纪是未知的。这样的值必须被解释成4位形式,因为MySQL内部使用4位存储年份。
对于DATETIME, DATE, TIMESTAMP和YEAR类型,MySQL使用下列规则的解释二义性的年份值:
? ?
在范围00-69的年值被变换到2000-2069。 在范围70-99的年值被变换到1970-1999。
记得这些规则仅仅提供对于你数据的含义的合理猜测。如果MySQL使用的启发规则不产生正确的值,你应该提供无二义的包含4位年值的输入。
1.4.4.2 DATETIME,DATE和TIMESTAMP类型 DATETIME, DATE和TIMESTAMP类型是相关的。本节描述他们的特征,他们是如何类似的而又不同的。
DATETIME类型用在你需要同时包含日期和时间信息的值时。MySQL检索并且以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,支持的范围是'1000-01-01 00:00:00'
18 http://www.yurennet.com MySQL入门及初步 到'9999-12-31 23:59:59'。(“支持”意味着尽管更早的值可能工作,但不能保证他们可以。)
DATE类型用在你仅需要日期值时,没有时间部分。MySQL检索并且以'YYYY-MM-DD'格式显示DATE值,支持的范围是'1000-01-01'到'9999-12-31'。
TIMESTAMP列类型提供一种类型,你可以使用它自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果你有多个TIMESTAMP列,只有第一个自动更新。TIMESTAMP值可以从1970的某时的开始一直到2037年,精度为一秒,其值作为数字显示。
自动更新第一个TIMESTAMP列在下列任何条件下发生: ? 列没有明确地在一个INSERT或LOAD DATA INFILE语句中指定。
?
1 列没有明确地在一个UPDATE语句中指定且一些另外的列改变值。(注意一个
UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。) 你明确地设定TIMESTAMP列为NULL.
?
例如,我们创建一个表: CREATE TABLE my_test ( )
然后,用如下语句录入数据:
INSERT my_test VALUES(1,20010101000000) INSERT my_test(id) VALUES(2) 然后,查询表中的内容: SELECT * from my_test 你可以看到内容:
+------+----------------+ | id | ts | +------+----------------+ | 1 | 20010101000000 | | 2 | 20010113165713 | +------+----------------+
id INT, ts TIMESTAMP
1.4.4.3 TIME类型 MySQL检索并以'HH:MM:SS'格式显示TIME值(或对大小时值,'HHH:MM:SS'格式)。TIME值的范围可以从'-838:59:59'到'838:59:59'。小时部分可能很大的的原因是TIME类型不仅可以被使用在表示一天的时间(它必须是不到24个小时),而且用在表示在2个事件之间经过的时间或时间间隔(它可以是比24个小时大些,或甚至是负值)。
你能用多中格式指定TIME值:
http://www.yurennet.com 19
MySQL金典培训教程 ?
作为'HH:MM:SS'格式的一个字符串。“宽松”的语法被允许--任何标点符号可用作时间部分的分隔符,例如,'10:11:12'和'10.11.12'是等价的。
作为没有分隔符的'HHMMSS'格式的一个字符串,如果它作为一个时间解释。例如,'101112'被理解为'10:11:12',但是'109712'是不合法的(它有无意义的分钟部分)并变成'00:00:00'。
作为HHMMSS格式的一个数字,如果它能解释为一个时间。例如,101112被理解为'10:11:12'。
?
?
1.4.4.4 YEAR类型 YEAR类型是一个有效的利用1字节类型表示年份。MySQL检索并且以YYYY格式显示YEAR值,其范围是1901到2155。 如果,只想保存日期,那么YEAR比其它类型比如SAMLLINT更为有效。
你能用多种格式指定YEAR值,既可以用4为字符,也可以使用4为字符串,当然要在1901到2155范围之内。
作为YEAR的一个优点是,你可以指定一个在'00'到'99'范围的2位字符串或者一个在'00'到'69'和'70'到'99'范围的值被变换到在2000到2069范围和1970到1999的YEAR值。
1.4.5 字符串类型 MySQL提供的字符串类型包括CHAR、VARCHAR、BLOB、TEXT、ENUM和SET。对这些类型作一个简要的叙述如下: CHAR(M) [BINARY]
一个定长字符串,当存储时,总是是用空格填满右边到指定的长度。在MySQL3.23以前的版本,M的范围是1 ~ 255个字符,在MySQL3.23版中,M值的范围是0 ~ 255个字符.当值被检索时,空格尾部被删除。CHAR类型在排序和比较时不区分大小写,除非给出BINARY关键词。NATIONAL CHAR(短形式NCHAR)是ANSI SQL的方式来定义CHAR列应该使用缺省字符集。这是MySQL的缺省。CHAR是CHARACTER的一个缩写。 CHAR(0) 可以用于在希望定义一个列,但由于尚不知道其长度,所以不想给其分配空间的情况下,CHAR(0) 列作为占位符很有用处。以后可以用 ALTER TABLE 来加宽这个列。
存储需求:M字节
[NATIONAL] VARCHAR(M) [BINARY]
一个变长字符串。注意:当值被存储时,尾部的空格被删除(这不同于ANSI SQL规范)。M的范围是1 ~ 255个字符。 VARCHAR类型在排序和比较时不区分大小写,除非给出BINARY关键词。VARCHAR是CHARACTER VARYING一个缩写。 存储需求:L+1字节(L是存储实际值需要的长度,1为存储该值实际长度) TINYBLOB、TINYTEXT
一个BLOB或TEXT列,最大长度为255(2^8-1)个字符。
20 http://www.yurennet.com
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库My SQL基础知识介绍第一章(4)在线全文阅读。
相关推荐: