Как я могу предотвратить изменение числовых значений MySQL? (PhpMyAdmin)

Я создал таблицу INVOICES в MySQL на phpMyAdmin.

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

Решение

NUMERIC(3,2) означает — 3 цифры для целого числа и 2 после десятичной точки.

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

6

Другие решения

Потому что значения (т.е. 31.80) находятся вне диапазона, и максимальное значение сохраняется в столбце, который 9.99,

NUMERIC(3,2)

может иметь 3 цифры — одну до и две после запятой.

2

Проблема в столбце типа данных: 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) или что-то подобное в соответствии с потребностями вашего бизнеса.

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),

Документация.

1

Выпуск с ЧИСЛОМ (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

1
По вопросам рекламы [email protected]