mysql中的decimal类型
2010-03-25 15:47
197 查看
今天调试程序,系统抛出这个异常:Out of range value adjusted for column 'bodyWeight'。
进数据库看见这个字段的类型是decimal[4,2]。录入三位数就出异常。
一个未压缩(unpack)的浮点数字。不能无符号。行为如同一个
只要把M改大一点就不出错了,我也到网上搜了一下,说这是mysql严格检查的结果。mysql下my.ini文件的 STRICT_TRANS_TABLES关掉就好了:
#Set the SQL mode to strict
#sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
又上网搜了一下STRICT_TRANS_TABLES这是什么?
STRICT_TRANS_TABLES的工作方式:
· 对于事务性存储引擎,在语句中任何地方出现的不良数据值均会导致放弃语句并执行回滚。
· 对于非事务性存储引擎,如果错误出现在要插入或更新的第1行,将放弃语句。(在这种情况下,可以认为语句未改变表,就像事务表一样)。首行后出现的错误不 会导致放弃语句。
取而代之的是,将调整不良数据值,并给出告警,而不是错误。换句话讲,使用STRICT_TRANS_TABLES后,错误值会导致 MySQL执行回滚操作,如果可以,所有更新到此为止。
要想执行更严格的检查,请启用STRICT_ALL_TABLES。除了非事务性存储引擎,它与STRICT_TRANS_TABLES等同, 即使当不良数据出现在首行后的其他行,所产生的错误也会导致放弃语句。这意味着,如果错误出现在非事务性表多行插入或更新过程的中途,仅更新部分结果。前 面的行将完成插入或更新,但错误出现点后面的行则不然。
进数据库看见这个字段的类型是decimal[4,2]。录入三位数就出异常。
DECIMAL[(M[,D])] [ZEROFILL]
一个未压缩(unpack)的浮点数字。不能无符号。行为如同一个
CHAR列:“未压缩”意味着数字作为一个字符串被存储,值的每一位使用一个字符。小数点,并且对于负数,“-”符号不在M中计算。如果
D是0,值将没有小数点或小数部分。
DECIMAL值的最大范围与
DOUBLE相同,但是对一个给定的
DECIMAL列,实际的范围可以通过
M和
D的选择被限制。如果
D被省略,它被设置为0。如果
M被省掉,它被设置为10。注意,在MySQL3.22里,
M参数包括符号和小数点。
只要把M改大一点就不出错了,我也到网上搜了一下,说这是mysql严格检查的结果。mysql下my.ini文件的 STRICT_TRANS_TABLES关掉就好了:
#Set the SQL mode to strict
#sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
又上网搜了一下STRICT_TRANS_TABLES这是什么?
STRICT_TRANS_TABLES的工作方式:
· 对于事务性存储引擎,在语句中任何地方出现的不良数据值均会导致放弃语句并执行回滚。
· 对于非事务性存储引擎,如果错误出现在要插入或更新的第1行,将放弃语句。(在这种情况下,可以认为语句未改变表,就像事务表一样)。首行后出现的错误不 会导致放弃语句。
取而代之的是,将调整不良数据值,并给出告警,而不是错误。换句话讲,使用STRICT_TRANS_TABLES后,错误值会导致 MySQL执行回滚操作,如果可以,所有更新到此为止。
要想执行更严格的检查,请启用STRICT_ALL_TABLES。除了非事务性存储引擎,它与STRICT_TRANS_TABLES等同, 即使当不良数据出现在首行后的其他行,所产生的错误也会导致放弃语句。这意味着,如果错误出现在非事务性表多行插入或更新过程的中途,仅更新部分结果。前 面的行将完成插入或更新,但错误出现点后面的行则不然。
相关文章推荐
- MySQL decimal、numeric数据类型介绍
- MySQL数字类型int与tinyint、float与decimal如何选择
- mysql float数据类型和decimal数据类型
- mysql多位小数字段用decimal类型
- mysql decimal、numeric数据类型
- mysql decimal、numeric数据类型
- mysql数据类型double和decimal区别详解
- MySQL中decimal类型的小问题
- MySQL float,double,decimal数据类型区别
- MySQL decimal 类型
- MySQL中Decimal类型和Float Double等区别
- MySQL中Decimal类型和Float Double的区别(详解)
- 关于MySQL数据类型定义的几个细节-INT(N)/VARCHAR(N)/DECIMAL(M,N)
- MySQL中的float和decimal类型float,double容易产生误差,对精确度要求比较高时,建议使用decimal来存,
- MySQL数据类型-decimal详解
- Mysql表操作和 DECIMAL(N,M)数据类型
- mysql decimal类型与decimal长度用法详解
- 详解MySQL数据类型DECIMAL(N,M)中N和M分别表示的含义
- MySQL中decimal类型的简单介绍
- MySQL数据类型中DECIMAL的作用和用法