MySQL: вопрос про endiannes для целочиленных типов
MySQL 5.0.4x/i386
вопрос наверное элементарный, но как-то лишь сейчас с ним столкнулся и явного ответа в документации не нашёл :-/
вопрос: при вставке целочисленного значения в таблицу - например UNSIGNED INTEGER - происходит ли автоматическая конвертация данных запроса в тот или иной порядок байт - big/little - или нет?
история: вставляю в базу голый 4х байтный IPv4 адрес в поле типа UNSIGNED INTEGER через prepared statement и хочу его после смотреть SELECT-ом в человечем виде a'la SELECT INET_NTOA(ip) FROM foo;
документация на INET_NTOA() не говорит ничего, на INET_ATON() говорит:
--- cut ---
INET_ATON(expr)
Given the dotted-quad representation of a network address as a string, returns an integer that represents the numeric value of the address. Addresses may be 4- or 8-byte addresses.
mysql> SELECT INET_ATON('209.207.224.40');
-> 3520061480
The generated number is always in network byte order. For the example just shown, the number is calculated as 209×2563 + 207×2562 + 224×256 + 40.
--- cut ---
..i.e. я так понимаю, что обе функции предполагают, что целочисленный адрес в базе должен храниться в сетевом порядке. прекрасно. по [моей] идее я так и делаю: подготавливаю выражение, назначаю параметры, в качестве значения поля передаю адрес как unsigned long в сетевом порядке дабы они в нём же и сохранились в базе как этого требует INET_ATON(). все работает на ура за исключением того, что в базе после INSERT-а данные сохраняются в перевёрнутом виде :-/
такое ощущение, что или библиотека клиента или база [что навряд ли] при вставке сама переворачивает значение ожидая при этом, что клиент всегда будет передавать целочисленные параметры выражения в host order.
в принципе, это было бы вполне логично, но явного подтверждения/утверждения в документации я не нашёл. so вопрос: так ли это?
// wbr