Я создал таблицу 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.');
NUMERIC(3,2)
означает — 3 цифры для целого числа и 2 после десятичной точки.
http://dev.mysql.com/doc/refman/5.5/en/fixed-point-types.html
Потому что значения (т.е. 31.80
) находятся вне диапазона, и максимальное значение сохраняется в столбце, который 9.99
,
NUMERIC(3,2)
может иметь 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)
или что-то подобное в соответствии с потребностями вашего бизнеса.
Изменить это:
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),
Выпуск с ЧИСЛОМ (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