### 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語句執行不會拋異常。測試