我需要在插入
之前将INET_ATON添加到ip字段INSERT INTO (`id`,`ip`) VALUES (NULL,'127.0.0.1');
我需要数据库在插入之前透明地转换ip。 并在选择中将其转换回INET_NTOA()
我无法更改查询以使用
INSERT INTO (`id`,`ip`) VALUES (NULL,INET_ATON('127.0.0.1'));
因为我无法控制执行这些查询的软件
答案 0 :(得分:2)
您可以使用INSERT INTO (
id ,
ip ) VALUES (NULL, INET_ATON('127.0.0.1'));
插入db
并使用SELECT INET_NTOA(ip) FROM table
答案 1 :(得分:2)
对于插入部分,您可以在数据库中设置TRIGGER BEFORE INSERT
:
DELIMITER |
DROP TRIGGER IF EXISTS `before_insert_ip`|
CREATE TRIGGER `before_insert_ip` BEFORE INSERT ON `table_name`
FOR EACH ROW
BEGIN
SET NEW.`ip` = INET_ATON(NEW.`ip`);
END;
|
delimiter;
SELECT部分有点棘手。 mysql中没有AFTER SELECT
触发器,您可以使用它将IP转换回应用程序代码。
相反,您可以重命名真实的桌子并将其隐藏在VIEW
:
RENAME TABLE `table_name` TO `table_name_real`;
CREATE OR REPLACE VIEW `table_name` (`id`, `ip`) AS
SELECT `id`, INET_NTOA(`ip`) AS `ip` FROM `table_name_real`;
注意:当您使用此VIEW
时,您需要修改TRIGGER
部分的INSERT
以使用table_name_real
代替{ {1}}