У меня есть MySQL UDF, который возвращает без знака длинный длинный значение. Когда я вызываю эту функцию в MySQL и данные сохраняются в базе данных, MySQL возвращает предупреждение:
«Значение BIGINT UNSIGNED вне диапазона».
Как я могу сохранить большие беззнаковые длинные длинные номера в базе данных?
Версия MySQL: 5.5.43
ОПЕРАЦИОННЫЕ СИСТЕМЫ : Убунту 14.04
пожалуйста помоги.
Предполагая ваш unsigned long long
тип данных 64-битный, он должен хорошо вписываться в MySQL BIGINT UNSIGNED
тип, который также 64 бит.
Я бы предложил проверить вашу реализацию C limits.h
( или же climits
для C ++) файл для макроса ULONG_MAX
чтобы обеспечить это является только 64 бита.
Однако вы должны знать, что есть определенные операции, которые вы можете выполнить с неподписанным значением, что также приведет к этой ошибке. Это может быть неприменимо, если вы просто храните точное значение, возвращаемое из UDF, но если вы делаете что-то вроде:
select my_udf() - 22 from somewhere
а также my_udf()
возвращается 15
(например), вы увидите это сообщение об ошибке, потому что -7
не может быть представлен в беззнаковом виде.
Если это так, решение может это будет так же просто, как приведение возвращаемого значения к типу со знаком, но нам потребуется больше информации о том, что оно может вернуть, чтобы получить совет правильно.