«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как MySQL обрабатывает длинные целые числа в более коротких столбцах: переполнение или усечение?

Как MySQL обрабатывает длинные целые числа в более коротких столбцах: переполнение или усечение?

Опубликовано 8 ноября 2024 г.
Просматривать:335

How Does MySQL Handle Long Integers in Shorter Columns: Overflow or Truncation?

Преобразование длинных целых чисел в более коротком столбце: механизм и формула

При вставке длинного целого числа в более короткий целочисленный столбец 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