Tuesday, August 17, 2010

MySQL, защита UNSIGNED поля при вычитании

Если уменьшать значение unsigned-поля в mysql, можно случайно передать ему значение меньше нуля:
UPDATE table SET key=key-value
Если value будет больше key, то key станет равен совсем не отрицательному числу (не может, т.к. unsigned), а станет равен верхней границе максимального значения типа данных unsigned (например, 2147483647).

Исключить такое поведение очень легко:
UPDATE table SET key=GREATEST(0,(key-value))
Функция GREATEST возвращает максимальное значение. Соответственно, если второй параметр GREATEST получился меньше нуля, нам нужен именно 0.

Enjoy!

No comments:

Post a Comment