Как вставить DECIMAL в базу данных MySQL - PullRequest
26 голосов
/ 09 августа 2011

У меня есть таблица базы данных с некоторыми полями, одно из них, 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

Ответы [ 3 ]

34 голосов
/ 09 августа 2011

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

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

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

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

Редактировать

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

7 голосов
/ 09 августа 2011

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

3 голосов
/ 30 ноября 2012

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

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 .. Надеюсь, это поможет, может быть, решит какую-то другую проблему, о которой вы, возможно, сейчас тянете волосы ... говоря о которой ....Мне нужно выяснить мою проблему, прежде чем я вырву все свои волосы ..... удачи ..:)

ОБНОВЛЕНИЕ .....

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...