Значения десятичной (3,2) в MySQL всегда равны 9.99
У меня есть поле, 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.
Любые идеи? Спасибо.
Ответы
Ответ 1
Максимальное значение для decimal(3, 2)
равно 9.99, поэтому, когда вы пытаетесь вставить что-то большее, оно ограничено 9.99. Попробуйте decimal(5, 2)
или что-то еще, если вы хотите хранить большие числа.
Первый аргумент - это общее число цифр точности, а второй аргумент - количество цифр после десятичной точки.
Ответ 2
В более старых версиях MySQL DECIMAL (3,2) означал 3 целых числа слева от DP и 2 вправо.
MySQL-разработчики с тех пор изменили его, поэтому первое свойство (в данном случае "3" ) представляет собой полное число целых чисел в десятичной системе (9.99 - три числа), а второе свойство (в данном случае "2" ) остается неизменным - количество знаков после запятой.
Это немного запутанно. В принципе, для полей DECIMAL любое количество целых чисел, которое вы хотите до того, как DP должно быть добавлено, к какому-либо числу целых чисел, которые вы хотите после DP, и установите в качестве первой опции.
Тогда, как уже было сказано, если вы попытаетесь ввести число, большее максимального значения для поля, MySQL обрезает его для вас. Проблема здесь в вашей конфигурации MySQL. Я подробно расскажу об этом в своем блоге.