MySQL版本为5.7.23。
IFNULL(INET_ATON(''),0)
在普通的查询中返回0,但在 update ... set
赋值时会出现错误。
问:是否有修补程序可以避免出现ERROR 1411 (HY000): Incorrect string value:
?
更新语句是由一个大型应用程序生成的,很难修改该应用程序。
mysql> create table foo (id int not null, ip int not null);
Query OK, 0 rows affected (0.21 sec)
mysql> insert into foo values (0,0);
Query OK, 1 row affected (0.26 sec)
更新作品,真实IP字符串
mysql> update foo set ip = ifnull(inet_aton('10.10.10.254'), 0) where id=0;
Query OK, 1 row affected (0.25 sec)
Rows matched: 1 Changed: 1 Warnings: 0
使用IFNULL函数的普通选择语句可获得所需的0
mysql> select IFNULL(inet_aton(''),0);
+-------------------------+
| IFNULL(inet_aton(''),0) |
+-------------------------+
| 0 |
+-------------------------+
1 row in set, 1 warning (0.00 sec)
使用IFNULL和空的IP字符串更新INET_ATON操作失败
mysql> update foo set ip = ifnull(inet_aton(''), 0) where id=0;
ERROR 1411 (HY000): Incorrect string value: '''' for function inet_aton
使用IFNULL和IPv6环回地址更新INET_ATON时失败
mysql> update foo set ip = ifnull(inet_aton('::1'), 0) where id=0;
ERROR 1411 (HY000): Incorrect string value: ''::1'' for function inet_aton