Подтвердить что ты не робот

Как вставить DECIMAL в базу данных MySQL

У меня есть таблица базы данных с некоторыми полями, одна из них, cost, установлена ​​в тип данных DECIMAL. Я установил параметры 4,2, которые должны иметь 4 числа перед десятичной точкой и 2 после.

(Мне сказали, что 4 здесь общая сумма, а 2 - это сумма после десятичной дроби, может кто-нибудь, пожалуйста, очистить это на стороне заметки?)

Когда я вставляю данные через запрос POST (например, значение 3.80), данные, хранящиеся в моей базе данных, фактически 99.99.

Что я делаю неправильно, чтобы вызвать это?

Здесь таблица:

CREATE TABLE IF NOT EXISTS `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(256) NOT NULL,
`cost` decimal(4,2) NOT NULL,
PRIMARY KEY (`id`)
)

Вот мой запрос:

INSERT INTO mytable (`id`,`title`,`cost`) 
VALUES (0, 'test title', '3.80')

Обновление: Он работает после того, как я изменил 4,2 до 6,2

4b9b3361

Ответ 1

Десятичные типы MySql немного сложнее, чем просто слева и справа от десятичной точки.

Первым аргументом является точность, которая представляет собой количество общих цифр. Второй аргумент scale, который является максимальным числом цифр справа от десятичной точки.

Таким образом, (4,2) может быть любым от -99.99 до 99.99.

Что касается того, почему вы получаете 99.99 вместо желаемого 3.80, значение, которое вы вставляете, должно интерпретироваться больше, чем 99.99, поэтому используется максимальное значение. Возможно, вы можете опубликовать код, который вы используете, для вставки или обновления таблицы.

Edit

Исправлено непонимание использования масштаба и точности, за http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html.

Ответ 2

Да, 4,2 означает "4 цифры всего, 2 из которых после десятичного знака". Это переводит число в формате 00.00. Кроме того, вам нужно будет указать нам ваш SQL-запрос. PHP не будет переводить 3.80 в 99.99 без уважительной причины. Возможно, вы отклонили свои поля/значения в запросе и пытаетесь вставить большее число, принадлежащее другому полю.

Ответ 3

Я заметил кое-что еще о вашей кодировке... посмотри

INSERT INTO reports_services (id,title,description,cost) VALUES (0, 'test title', 'test decription ', '3.80')

в вашем коде "CREATE TABLE" у вас установлен идентификатор "AUTO_INCREMENT", что означает, что он автоматически генерирует результат для этого поля.... но в вашем предыдущем коде вы включаете его как одну из вставок и в "VALUES" у вас есть 0 там... idk, если ваш способ сообщить нам, что вы оставили его пустым, потому что он установлен на AUTO_INC. или если этот фактический код у вас есть... если это код, который вы не только не должны пытаться отправить данные в поле, установленное для его генерации автоматически, но ПРАВОЙ ПУТЬ сделать это НЕПРАВИЛЬНО будет

'0',

вы помещаете

0,

lol.... так что это может вызвать некоторые проблемы... Я также заметил в коде после "описания теста", что у вас есть пробел перед "....", который может тоже что-то выбросить.... idk.. Надеюсь, это поможет мне, возможно, решить какую-то другую проблему, с которой вы могли бы вытащить свои волосы сейчас... говоря о которой... Мне нужно выяснить мою проблему, прежде чем я разорву все волосы вне..... удачи..:)

UPDATE.....

Я почти забыл... если у вас есть 0, чтобы показать, что он пуст... вы можете ввести "тестовое название" в качестве идентификатора и "описание теста" в качестве названия, затем "3. любые центы" для описание, оставив "стоимость" пустым......, поэтому может быть, поэтому он превышен, потому что, если я не ошибаюсь, у вас есть значение NOT NULL.... и вы оставили его null... так что это заставило что-то... может быть.... lol