2010-06-01 94 views
1

我有一个像小数点(2,1)的列,它的工作正常,但是当我尝试存储像10这样的值时,它存储为9.9 ..某些特定的原因?mysql存储问题

回答

2

是的,当你说2,1时,你真正说的是:这个列可以存储两个数字,其中一个数字可以在小数点后面。 如果您希望能够保存10.1,您可以使用DECIMAL(3,1),因为10.1总共是3位数字。

它会发出警告,BTW: mysql> SHOW CREATE TABLE t \ G *************************** 1 。***** *********************** 表:t 创建表:CREATE TABLE ta decimal(2,1)DEFAULT '0.0' )ENGINE = InnoDB的默认字符集= LATIN1 1行集(0.00秒)

的MySQL> INSERT INTO T(A)VALUES(10); Query OK,1 row affected,1 warning(0.00 sec)

mysql> SHOW WARNINGS \ G ************************* ** 1.行*************************** 级别:警告 代码:1264 - 消息:超出范围值列 '一个' 1行 1行集(0.00秒)

的MySQL>

-

编辑:并严格模式运行时(http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html#sqlmode_traditional )它实际上会发出警告。

3

您的十进制字段的宽度为两位数,其中一位数字位于小数点右侧。这意味着小数点左侧只有一位数字。您不可能在该字段中存储“10”。

+0

因此,不是提出一个错误mySQL默默'降级'10到9.9?哇... – 2010-06-01 15:31:59

+0

okie.thanks寻求帮助。我误解了我在小数点前2位数字和小数点后1位数字的地方教授的语法 – Hacker 2010-06-01 15:42:44

+0

pjabbott - 是的。如果你发现这种行为不可取,那么你可以在建立连接后发出SET SESSION sql_mode ='TRADITIONAL''。 – Hammerite 2010-06-01 19:26:55