如何防止MySQL数值发生变化? (phpMyAdmin的)

时间:2014-11-24 10:02:22

标签: php mysql phpmyadmin numeric

我在phpMyAdmin上创建了MySQL中的表INVOICES。

CREATE TABLE INVOICES(
 INVOICENUMBER       NUMERIC(3) NOT NULL PRIMARY KEY,
 JOBID               NUMERIC(3) NOT NULL,
 CURRENTDATE         DATE,
 CHARGEDETAILS       VARCHAR(200),
 CHARGESUBTOTAL      NUMERIC(3,2) NOT NULL CHECK (CHARGESUBTOTAL >= 0),
 GRANDTOTAL          NUMERIC(3,2) NOT NULL CHECK (GRANDTOTAL >= 0),
 FINALWORKLOG        VARCHAR(200),
 TERMS               VARCHAR(200),
 INDEX (JOBID)
 );

但是,我在尝试向表中添加记录时遇到了问题。第一个插入命令正确输入所有内容,但第二个命令将数值(CHARGESUBTOTAL和GRANDTOTAL)转换为表中的9.99。我不确定是什么导致了它,所以有人可以帮助我吗?

INSERT INTO INVOICES VALUES (1,1,'2014-11-15','None as the job was cancelled.',0.00,0.00,'The job was cancelled.','None.');
INSERT INTO INVOICES VALUES (2,2,'2014-11-15','£31.80 for total work.',31.80,35.00,'Employee took care of all the expected duties.','Payment should be undertaken within 7 days of receipt.');

5 个答案:

答案 0 :(得分:6)

NUMERIC(3,2)表示 - 整数的3位数和小数点后的2位。

http://dev.mysql.com/doc/refman/5.5/en/fixed-point-types.html

答案 1 :(得分:2)

因为值(即31.80)超出范围且最大值存储在9.99列中。

NUMERIC(3,2)

可以有3个数字 - 一个在逗号之前,两个在逗号之后。

答案 2 :(得分:1)

问题是列数据类型:NUMERIC(3,2)

见这里:http://dev.mysql.com/doc/refman/5.0/en/fixed-point-types.html

3表示将存储3位有效数字(即0-999或0-99.9或0-9.99)。 2是小数点后的位数(来自s.f.数字),因此3,2表示0-9.99但4,1表示0-99.99,依此类推。

根据您的业务需求将其更改为NUMERIC(10,2)或类似内容。

答案 3 :(得分:1)

改变这个:

 CHARGESUBTOTAL      NUMERIC(3,2) NOT NULL CHECK (CHARGESUBTOTAL >= 0),
 GRANDTOTAL          NUMERIC(3,2) NOT NULL CHECK (GRANDTOTAL >= 0),

要:

 CHARGESUBTOTAL      NUMERIC(4,2) NOT NULL CHECK (CHARGESUBTOTAL >= 0),
 GRANDTOTAL          NUMERIC(4,2) NOT NULL CHECK (GRANDTOTAL >= 0),

Documentation

答案 4 :(得分:1)

问题与NUMERIC(3,2)有关。用NUMERIC(5,2)改变它以使事情有效。

说明:

在DECIMAL列声明中,可以(通常是)指定精度和比例;例如:

薪水DECIMAL(5,2) 在这个例子中,5是精度,2是刻度。精度表示为值存储的有效位数,刻度表示小数点后可存储的位数。

标准SQL要求DECIMAL(5,2)能够存储五位数和两位小数的任何值,因此可以存储在工资列中的值范围为-999.99到999.99。

参考链接:http://dev.mysql.com/doc/refman/5.5/en/fixed-point-types.html