This Domain(Admin5.com) is for Sale:

My SQL数据库实用技术(08)

时间:2007-12-23  来源:不详  作者:迈克DB

在定义整型列时,可以指定可选的显示尺寸M。假如这样,M 应该是一个1 到255 的整数。它表示用来显示列中值的字符数。例如, MEDIUMINT(4) 指定了一个具有4 个字符显示宽度的MEDIUMINT 列。假如定义了一个没有明确宽度的整数列,将会自动分配给它一个缺省的宽度。缺省值为每种类型的“最长”值的长度。假如某个特定值的可打印表示需要不止M 个字符,则显示完全的值;不会将值截断以适合M 个字符。对每种浮点类型,可指定一个最大的显示尺寸M 和小数位数D。M 的值应该取1 到2 5 5。D 的值可为0 到3 0,但是不应大于M - 2。(假如熟悉ODBC 术语,就会知道M 和D 对应于
ODBC 概念的“精度”和“小数点位数”)M 和D 对F L O AT 和DOUBLE 都是可选的,但对于DECIMAL 是必须的。在选项M 和D时,假如省略了它们,则使用缺省值。下面的语句创建了一个表,它说明了数值列类型的M 和D 的缺省值(其中不包括D E C I M A L,因为M 和D 对这种类型不是可选的):

假如在创建表之后使用DESCRIBE my_table 语句,则输出的Field 和Type 列如下所示(注重,假如用MySQL 的3.23 以前的版本运行这个查询,则有一个小故障, 即BIGINT 的显示宽度将是21 而不是2 0。):

本文来自织梦



每一个数字列都具有一个由列类型所决定的取值范围。假如打算插入一个不在列范围内的值,将会进行截取:MySQL 将剪裁该值为取值范围的边界值并使用这个结果。在检索时不进行值的剪裁。
值的剪裁根据列类型的范围而不是显示宽度进行。例如,一个SMALLINT(3) 列显示宽度为3 而取值范围为-32768 到3 2 7 6 7。值12345 比显示宽度大,但在该列的取值范围内,因此它可以插入而不用剪裁并且作为12345 检索。值99999 超出了取值范围,因此在插入时被剪裁为3 2 7 6 7。以后在检索中将以值3 2 7 6 7检索该值。
一般赋予浮点列的值被四舍五入到这个列所指定的十进制数。假如在一个F L O AT(8, 1)的列中存储1 . 2 3 4 5 6,则结果为1 . 2。假如将相同的值存入F L O AT(8, 4) 的列中,则结果为1 . 2 3 4 6。这表示应该定义具有足够位数的浮点列以便得到尽可能精确的值。假如想精确到千分之一,那就不要定义使该类型仅有两位小数。
浮点值的这种处理在MySQL 3.23 中有例外,F L O AT(4) 和F L O AT(8) 的性能有所变化。这两种类型现在为单精度( 4 字节)和双精度( 8 字节)的类型,在其值按给出的形式存放(只受硬件的限制)这一点上说,这两种类型是真浮点类型。 内容来自dedecms
DECIMAL 类型不同于F L O AT 和D E C I M A L,其中DECIMAL 实际是以串存放的。DECIMAL 可能的最大取值范围与DOUBLE 一样,但是其有效的取值范围由M 和D 的值决定。假如改变M 而固定D,则其取值范围将随M 的变大而变大。表2 - 7的前三行说明了这一点。假如固定M 而改变D,则其取值范围将随D 的变大而变小(但精度增加)。表2 - 7的后三行说明了这一点。

给定的DECIMAL 类型的取值范围取决于MySQL 的版本。对于MySQL 3.23 以前的版本,DECIMAL(M, D) 列的每个值占用M 字节,而符号(假如需要)和小数点包括在M 字节中。因此,类型为DECIMAL(5, 2) 的列,其取值范围为-9.99 到9 9 . 9 9,因为它们覆盖了所有可能的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),“最长”的值(- 9 9 9 . 9 9)需要7个字节。在正取值范围的一端,不需要正号,因此MySQL 利用它扩充了取值范围,使其超

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息