### The error occurred while setting parameters ### SQL: insert into t_gateway( gw_address, type_name, host_node_id, port, decoder_class, handle_class, sdk_file_path, forward, forward_host, forward_port ,vip ) values( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ,INET_ATON(?) ) ### Cause: java.sql.SQLException: Incorrect string value: '''' for function inet_aton ; uncategorized SQLException for SQL []; SQL state [HY000]; error code [1411]; Incorrect string value: '''' for function inet_aton; nested exception is java.sql.SQLException: Incorrect string value: '''' for function inet_aton at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84) ~[spring-jdbc-4.3.2.RELEASE.jar:4.3.2.RELEASE]
报的异常是inet_aton函数,不正确的参数‘’‘’,其实就是空字符串。通过在MySQL5.6上测试和5.7测试对比,截图以下:java
MySQL5.6node
MySQL5.7spring
能够看出在5.6上无论用于select,insert inet_aton函数,当参数为空字符串时,都能返回null,并正确处理。而在5.7版本上,当在执行select时inet_aton能返回null,可是在insert语句中报了错,和我程序报的错同样。sql
至此能够看出程序中报的错就是由于MySQL5.六、5.7对inet_aton函数行为差别致使的。也就是5.7对inet_aton函数的参数有了更强的校验。编程
可是5.7中,一样是执行函数,为何insert语句能抛出错误信息,可是select确能返回值null呢? 其实select中也报了一样的异常,只是把异常看成warning了,当执行完select inet_aton('');后能够看到下面有1 warning的字样。能够经过show warnings看到详细的信息。函数
MySQL5.7 对inet_aton函数参数校验更加严格,因此在编程的时候在执行SQL以前就需要对参数进行格式校验,确保SQL语句执行不会抛异常。测试