数据库中的decimal、enum字段

1.decimal(数值数据类型。可以规定其精度。)

 直接给个例子。

decimal(5,2):其中 5 为最多可以存储的十进制位数为10位,是小数点前后的位数总和,2表示小数点后面的位数。

 例如100.20是合法的值,而1234.56,总数为6位,为非法的数据值。

 有人说那存12345应该可以吧。事实证明是不行的。因为其精度是2,所以12345会被当做12345.00来处理,还是   非法的数据。

 那么存储100.11111111111111呢?经测试,数据是可以存储的,但是会丢失精度(四舍五入),数据100.11会存储到数据库。

(原文详见:http://blog.csdn.net/jiazimo/article/details/5581056)


2.enum(ENUM是一个字符串对象,其值来自表创建时在列规定中显式枚举的一列值)

在某些情况下,ENUM值也可以为空字符串('')NULL

1.如果你将一个非法值插入ENUM(也就是说,允许的值列之外的字符串),将插入空字符串以作为特殊错误值。该字符串与“普通”空字符串不同,该字符串有数值值0。后面有详细讨论。

2. 如果将ENUM列声明为允许NULLNULL值则为该列的一个有效值,并且 默认值为NULL。如果ENUM列被声明为NOT NULL,其默认值为允许的值列的第1个元素。

每个枚举值有一个索引:

1.来自列规定的允许的值列中的值从1开始编号。

2.空字符串错误值的索引值是0。这说明你可以使用下面的SELECT语句来找出分配了非法ENUM值的行:

               mysql>SELECT * FROMtbl_nameWHEREenum_col=0;

        NULL值的索引是NULL

例如,定义为ENUM的列('one''two''three')可以有下面所示任何值。还显示了每个值的索引:

索引

NULL

NULL

''

0

'one'

1

'two'

2

'three'

3

枚举最多可以有65,535个元素。

当创建表时,ENUM成员值的尾部空格将自动被删除。

当检索时,保存在ENUM列的值使用列定义中所使用的大小写来显示。请注意可以为ENUM列分配字符集和 校对规则。对于二进制或大小写敏感的校对规则,当为列分配值时应考虑大小写。

如果在数值上下文中检索一个ENUM值,将返回列值的索引。例如,你可以这样从ENUM列搜索数值值:

mysql>SELECTenum_col+0 FROMtbl_name;

如果将一个数字保存到ENUM列,数字被视为索引,并且保存的值是该索引对应的枚举成员。(但是,这不适合LOAD DATA,它将所有输入视为字符串)不建议使用类似数字的枚举值来定义一个ENUM列,因为这很容易引起混淆。例如,下面的列含有字符串值'0''1''2'的枚举成员,但数值索引值为123

numbers ENUM('0','1','2')

根据枚举成员在列定义中列出的顺序对ENUM值进行排序。(换句话说,ENUM值根据索引编号进行排序)例如,对于ENUM('a''b')'a'排在'b'前面,但对于ENUM('b''a')'b'排在'a'前面。空字符串排在非空字符串前面,并且NULL值排在所有其它枚举值前面。要想防止意想不到的结果,按字母顺序规定ENUM列。还可以使用GROUP BY CAST(col AS CHAR)GROUP BY CONCAT(col)来确保按照词汇对列进行排序而不是用索引数字。

如果你想要确定一个ENUM列的所有可能的值,使用SHOW COLUMNS FROMtbl_nameLIKEenum_col,并解析输出中第2列的ENUM定义。

(原文详见:http://blog.sina.com.cn/s/blog_66d6c8870100qn0f.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值