Mysql ОШИБКА 1264 (22003)

0

У меня есть сценарий bash, который хранит значения в базе данных mysql. Для одного значения я получаю ERROR 1264 (22003). Строка в скрипте: INSERT INTO $TABLE2 (datetime, actualtemp, tempstate) VALUES ("$datetime", "$actual_temp", "$set_temp_state");

Значение $actual_temp = 21.0 Столбец "actualtemp" имеет тип DECIMAL со значением/длиной 2,1 Ошибка: ERROR 1264 (22003) at line 2: Out of range value for column 'actualtemp' at row 1

У меня есть аналогичная строка: INSERT INTO $TABLE1 (datetime, temperature) VALUES ("$datetime", "$temp"); где $temp = 2.2 и temperature столбца также DECIMAL со значением/длиной 2,1. Эта линия работает правильно.

Полный скрипт: mysql $DB_NAME << EOF INSERT INTO $TABLE1 (datetime, temperature) VALUES ("$datetime", "$temp"); INSERT INTO $TABLE2 (datetime, actualtemp, tempstate) VALUES ("$datetime", "$actual_temp", "$set_temp_state"); EOF mysql $DB_NAME << EOF INSERT INTO $TABLE1 (datetime, temperature) VALUES ("$datetime", "$temp"); INSERT INTO $TABLE2 (datetime, actualtemp, tempstate) VALUES ("$datetime", "$actual_temp", "$set_temp_state"); EOF

21.0 должно быть правильным значением для DECIMAL 2,1, или я ошибаюсь?

Теги:

2 ответа

2
Лучший ответ

Вы должны изменить M и D вашего столбца, чтобы принять числа, превышающие 9.9.
Измените значение DECIMAL (3,1), чтобы принять ваше значение, максимальное число будет 99.9.
Вы должны учитывать (3,1) означает, что у вас есть 3 цифры, а 1 из них - дробная часть. Таким образом, для целой части осталось 2 цифры.

Посмотрите на этот документ: https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html
И точка M - максимальное количество цифр.
Во всяком случае, я предлагаю использовать float вместо десятичного числа, потому что десятичной системе требуется больше места, чем float. Кроме того, если вы хотите точное представление.

  • 0
    Я собираюсь попробовать ... Обновление: все та же ошибка, как для DECIMAL (9,9), так и для DECIMAL (3.1). Изменение FLOAT ничего не меняет.
  • 0
    Ваше последнее дополнение сработало! Для десятичной я должен был изменить его на 65,9, так как 65 является максимумом (я получил сообщение об ошибке). Большое спасибо!
Показать ещё 2 комментария
1

Ваша десятичная переменная не определена правильно, с actualtemp decimal(2,1) вас есть место для 1 целочисленной цифры и 1 цифры для десятичной части. Подумайте, чтобы прочитать определение DECIMAL в этой ссылке

Если вставить в actualtemp значение 2.123123, это не удастся, хотя она будет округлена, но если вставить 10.0 будет завершаться ERROR 1264 (22003): Out of range value for column

Подумайте о том, чтобы изменить определение столбца на большее количество цифр, я ставлю 3, вы можете изменить его столько, сколько нужно:

ALTER TABLE YOURDATABASE.YOURTABLE MODIFY actualtemp DECIMAL(3,1)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню