У меня есть сценарий 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, или я ошибаюсь?
Вы должны изменить 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. Кроме того, если вы хотите точное представление.
Ваша десятичная переменная не определена правильно, с 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)