2010-06-01 111 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