Как остановить округление десятичного поля MySQL?

У меня есть таблица в MySQL с полем десятичной длины, длиной 9, без знака. Я использую его для цен.

После того, как я вставляю данные и запрашиваю их, он все округлен, и десятичная метка удалена.

Я в замешательстве, почему.

Советы по устранению неполадок?


Хост : web.com

Версия phpMyAdmin : 2.11.10.1

Версия клиента MySQL : 5.0.95

Десятичный тип в MySQL имеет две кнопки настройки: точность и масштаб. Вы опустили масштаб, поэтому он по умолчанию равен 0.

Документация ( ссылка )

Синтаксис объявления для столбца DECIMAL – DECIMAL (M, D). Диапазоны значений аргументов в MySQL 5.1 следующие:

M – максимальное количество цифр (точность). Он имеет диапазон от 1 до 65. (Старые версии MySQL допускают диапазон от 1 до 254.)

D – количество цифр справа от десятичной точки (шкалы). Он имеет диапазон от 0 до 30 и должен быть не больше M.

пример

mysql> create table test01 (field01 decimal(9)); Query OK, 0 rows affected (0.01 sec) mysql> insert into test01 (field01) values (123.456); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> select * from test01; +---------+ | field01 | +---------+ | 123 | +---------+ 1 row in set (0.00 sec) mysql> create table test02 (field01 decimal(9, 4)); Query OK, 0 rows affected (0.00 sec) mysql> insert into test02 (field01) values (123.456); Query OK, 1 row affected (0.01 sec) mysql> select * from test02; +----------+ | field01 | +----------+ | 123.4560 | +----------+ 1 row in set (0.00 sec) 

Округление выполняется, потому что вы можете установить его тип данных как int .

Измените его тип данных на double OR Float .

Это поможет вам.

РЕДАКТИРОВАТЬ

Если у вас есть datatype decimal укажите его размер как это.

 create table numbers (a decimal(10,2)); 

У меня такая же проблема. Оказывается, PHPMyAdmin игнорирует десятичное место, если вы введете и предположите, что оно равно 0. Используйте альтернативный запрос таблицы, чтобы изменить его. ALTER TABLE tablename CHANGE rate rate DECIMAL (30,3) НЕОПРЕДЕЛЕН НЕ НУЛЛ;

Округление происходит, потому что вам нужно объявить точность в объявлении типа

 create table test01 (field01 decimal(9,2));