Преобразование длинных целых чисел в более коротком столбце: механизм и формула
При вставке длинного целого числа в более короткий целочисленный столбец MySQL обычно усекает значение чтобы соответствовать указанной длине. Однако в некоторых случаях поведение может отличаться, что приводит к неожиданному преобразованию.
Рассмотрим столбец some_number из 10-значного длинного целого числа. Если в этот столбец вставлено значение, превышающее максимальный диапазон целых чисел (2147483647), MySQL вместо усечения установит значение 2147483647, максимально допустимое целое число для этого типа данных.
Механизм, лежащий в основе этого типа данных. Преобразование
Преобразование происходит из-за целочисленного переполнения. Когда длинное целое число выходит за пределы доступного диапазона, MySQL автоматически интерпретирует его как отрицательное целое число и сохраняет представление дополнения до двух. Это отрицательное значение при обратном преобразовании в целое число без знака дает 2147483647.
Формула преобразования
Результирующее значение можно рассчитать по следующей формуле:
Resulting Integer = (Original Integer & 0x7FFFFFFF) 1
Для данного примера с исходным целым числом 715988985123857:
Resulting Integer = (715988985123857 & 0x7FFFFFFF) 1 Resulting Integer = (2147483647) 1 Resulting Integer = 2147483647
Поэтому преобразование из 715988985123857 в 2147483647 является не усечением, а скорее переполнением до максимально допустимого целого числа для указанного типа данных.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3