【问题标题】:How can I prevent MySQL numeric values from changing? (phpMyAdmin)如何防止 MySQL 数值发生变化? (phpMyAdmin)
【发布时间】:2014-11-24 10:02:22
【问题描述】:

我已经在 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.');

【问题讨论】:

    标签: php mysql phpmyadmin numeric


    【解决方案1】:

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

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

    【讨论】:

    • 我们可以投票两次吗? :) 这是一个非常准确的陈述。
    【解决方案2】:

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

    NUMERIC(3,2)
    

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

    【讨论】:

      【解决方案3】:

      问题是列数据类型: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) 或类似名称。

      【讨论】:

        【解决方案4】:

        改变这个:

         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.

        【讨论】:

          【解决方案5】:

          问题在于 NUMERIC(3,2)。用 NUMERIC(5,2) 更改它以使事情正常运行。

          解释:

          在 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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-05-24
            • 2018-10-30
            • 1970-01-01
            • 1970-01-01
            • 2020-02-14
            • 2019-07-20
            • 1970-01-01
            相关资源
            最近更新 更多