Десятичные (3,2) значения в MySQL всегда 9,99 - PullRequest
30 голосов
/ 06 октября 2009

У меня есть поле justsomenum типа decimal (3,2) в MySQL, которое, кажется, всегда имеет значения 9,99, когда я вставляю что-то вроде 78,3. Почему?

Вот как выглядит мой стол:

mysql> describe testtable;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| id            | int(11)      | NO   | PRI | NULL    | auto_increment | 
| firstname     | varchar(20)  | YES  |     | NULL    |                | 
| lastname      | varchar(20)  | YES  |     | NULL    |                | 
| justsomenum   | decimal(3,2) | YES  |     | NULL    |                | 
+---------------+--------------+------+-----+---------+----------------+

Когда я вставляю что-то вроде этого и выбираю:

mysql> insert into testtable (firstname, lastname, justsomenum) values ("Lloyd", "Christmas", 83.5);

Я получаю 9,99 при выборе.

mysql> select * from testtable;
+----+-----------+-----------+---------------+
| id | firstname | lastname  | justsomenum   |
+----+-----------+-----------+---------------+
|  1 | Shooter   | McGavin   |          9.99 | 
|  2 | Lloyd     | Christmas |          9.99 | 
|  3 | Lloyd     | Christmas |          9.99 | 
|  4 | Lloyd     | Christmas |          9.99 | 
+----+-----------+-----------+---------------+
4 rows in set (0.00 sec)

Это MySQL 5.0.86 в Mac OS X 10.5.8.

Есть идеи? Спасибо.

Ответы [ 2 ]

55 голосов
/ 06 октября 2009

Максимальное значение для decimal(3, 2) составляет 9,99, поэтому при попытке вставить что-то большее, оно ограничивается 9,99. Попробуйте decimal(5, 2) или что-то еще, если хотите хранить большие числа.

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

17 голосов
/ 06 октября 2009

В старых версиях MySQL DECIMAL (3,2) означало 3 целых числа слева от DP и 2 справа.

С тех пор разработчики MySQL изменили его, поэтому первое свойство (в данном случае «3») - это полное число целых чисел в десятичной дроби (9,99 - три числа), а второе свойство (в данном случае «2») остается прежним - количество десятичных знаков.

Это немного сбивает с толку. По сути, для полей DECIMAL любое количество целых чисел, которое вы хотите до DP, должно быть добавлено к любому количеству целых чисел, которое вы хотите после DP, и установите в качестве первого параметра.

Тогда, как уже было сказано, если вы попытаетесь ввести число, превышающее максимальное значение для поля, MySQL обрежет его для вас. Проблема здесь в вашей конфигурации MySQL. Более подробно об этом я рассказываю в своем блоге .

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