c ++ использует длинный дальний диапазон против mysql без знака bigint range

У меня есть MySQL UDF, который возвращает без знака длинный длинный значение. Когда я вызываю эту функцию в MySQL и данные сохраняются в базе данных, MySQL возвращает предупреждение:
«Значение BIGINT UNSIGNED вне диапазона».
Как я могу сохранить большие беззнаковые длинные длинные номера в базе данных?

Версия MySQL: 5.5.43
ОПЕРАЦИОННЫЕ СИСТЕМЫ : Убунту 14.04

пожалуйста помоги.

1

Решение

Предполагая ваш 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 не может быть представлен в беззнаковом виде.

Если это так, решение может это будет так же просто, как приведение возвращаемого значения к типу со знаком, но нам потребуется больше информации о том, что оно может вернуть, чтобы получить совет правильно.

1

Другие решения


По вопросам рекламы [email protected]