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

Значения десятичной (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.

Любые идеи? Спасибо.

4b9b3361

Ответ 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. Я подробно расскажу об этом в своем блоге.