我在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.');
答案 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),
答案 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