Жизнь замечательных грибов
Начиная с 18 сборки, в Lanbiling поменялись все поля связанные с работой с IP.
Например, было:
segment
int(10) unsigned NOT NULL DEFAULT ‘0’
Стало:
segment
binary(16) DEFAULT NULL
Соответственно если раньше выборку по IP можно было сделать :
1 2 3 4 5 6 7 |
mysql> select inet_ntoa(segment) from staff limit 1; +--------------------+ | inet_ntoa(segment) | +--------------------+ | 11.242.164.20 | +--------------------+ 1 row in set (0.00 sec) |
Теперь:
1 2 3 4 5 6 7 |
mysql> select inet_ntoa(CONV(RIGHT(HEX(segment), 8),16,10)) from staff limit 1; +-----------------------------------------------+ | inet_ntoa(CONV(RIGHT(HEX(segment), 8),16,10)) | +-----------------------------------------------+ | 11.242.164.20 | +-----------------------------------------------+ 1 row in set (0.00 sec) |
Плюс предлагают несколько функций для работы с подобным типом значений:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
delimiter ;; DROP FUNCTION IF EXISTS `IPV42BIN`;; CREATE FUNCTION `IPV42BIN`(addr int(11)) RETURNS BINARY(16) NO SQL DETERMINISTIC SQL SECURITY INVOKER BEGIN RETURN unhex(concat('00000000000000000000FFFF', lpad(conv(addr, 10, 16), 8, '0'))); END;; DROP FUNCTION IF EXISTS `IPSV42BIN`;; CREATE FUNCTION `IPSV42BIN`(addr varchar(16)) RETURNS BINARY(16) NO SQL DETERMINISTIC SQL SECURITY INVOKER BEGIN RETURN unhex(concat('00000000000000000000FFFF', lpad(conv(inet_aton(addr), 10, 16), 8, '0'))); END;; DROP FUNCTION IF EXISTS `BIN2IPSV4`;; CREATE FUNCTION `BIN2IPSV4`(addr binary(16)) RETURNS VARCHAR(16) NO SQL DETERMINISTIC SQL SECURITY INVOKER BEGIN RETURN inet_ntoa(conv(substr(hex(addr),25,8),16,10)); END;; delimiter ; |
Затейники…
Вполне работает вот так:
1 |
select replace(inet6_ntoa(segment),"::ffff:","") from staff limit 1; |
и
1 |
select INET6_ATON("::ffff:192.168.13.1") limit 1; |