[MySQL] очень странный прикол с INT типом

rtyug
На сайте с 13.05.2009
Offline
263
885

выполня запрос:

INSERT INTO log SET time = 11111, ip = '4294967295';

смотрю таблицу:

MariaDB [otrs]> select * from log;

+------------+------------+
| time | ip |
+------------+------------+
| 11111 | 2147483647 |
+------------+------------+

ВОПРОС: почему при SELECT значение парамметра ip другое - 2147483647, чем при INSERT было которое 4294967295?

структура таблицы:

CREATE TABLE `log` (

`time` int(11) NOT NULL,
`ip` int(10) NOT NULL,
PRIMARY KEY (`time`,`ip`)
);
Спалил тему: Pokerstars вывод WMZ, etc на VISA 0% или SWIFT + Конверт USD/GBP,etc (net profit $0,5 млрд) (https://minfin.com.ua/blogs/94589307/115366/) Monobank - 50₴ на счет при рег. тут (https://clck.ru/DLX4r) | Номер SIP АТС Москва 7(495) - 0Ꝑ, 8(800) - 800Ꝑ/0Ꝑ (http://goo.gl/XOrCSn)
Alex91
На сайте с 30.12.2007
Offline
258
#1

Вы знаете, какие границы INT?

C Уважением, Алексей
R
На сайте с 18.12.2009
Offline
92
#2

Максимальное значение для поля типа INT в Вашем случае составляет 2147483647.

Используя Unsigned, можно добиться максимального значения в 4294967295.

Также есть BIGINT. Читайте:

http://dev.mysql.com/doc/refman/5.5/en/integer-types.html

LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#3

Манул по INT почитайте. Прикол это у вас. Записывать такие большие числа в INT. Выбирайте BIGINT и вообще почитайте про них. Если IP записываете, для него есть свой формат или вообще пишите в varchar зачем тут INT не понятно.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
A1
На сайте с 04.09.2013
Offline
18
#4
rtyug:
ВОПРОС: почему при SELECT значение парамметра ip другое - 2147483647, чем при INSERT было которое 4294967295?

IP адрес надо хранить в поле с типом VARBINARY или VARBINARY(16). Для преобразования из строкового представления использовать функцию INET6_ATON (MySQL 5.6.3) или аналог.

Mutabors
На сайте с 17.09.2012
Offline
127
#5
abbat13:
IP адрес надо хранить в поле с типом VARBINARY или VARBINARY(16)

Все же VARBINARY(40)... Про IPv6 забывать не хорошо...

Самый продвинутый и надежный SSD хостинг рунета с изоляцией сайтов по 115 руб! (http://beget.ru/?id=332651) Контекстная реклама и продажи. Конкурентные и серые темы. Дорого! Не трать время на рутину! Ее сделают за копейки! (http://www.work-zilla.com?ref=143498)
TF-Studio
На сайте с 17.08.2010
Offline
334
#6

Совершенно не верный подход.

Время/дату и ip следует хранит в рекомендуемых, специально предназначенных для этого типах.

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
A1
На сайте с 04.09.2013
Offline
18
#7
Mutabors:
Все же VARBINARY(40)... Про IPv6 забывать не хорошо...

Все же не 40, а 16 (128 бит => 16 октетов) :)

siv1987
На сайте с 02.04.2009
Offline
427
#8

ай-яй-яй rtyug

Mysql:

To store values generated by INET_ATON(), use an INT UNSIGNED column rather than INT, which is signed. If you use a signed column, values corresponding to IP addresses for which the first octet is greater than 127 cannot be stored correctly. See http://dev.mysql.com/doc/refman/5.0/en/out-of-range-and-overflow.html

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий