专栏首页IT杂记INET_ATON()函数在MySQL5.6版本和5.7版本的差异

INET_ATON()函数在MySQL5.6版本和5.7版本的差异

问题

### 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测试对比,截图如下:

MySQL5.6

MySQL5.7

    可以看出在5.6上不管用于select,insert inet_aton函数,当参数为空字符串时,都能返回null,并正确处理。而在5.7版本上,当在执行select时inet_aton能返回null,但是在insert语句中报了错,和我程序报的错一样。

至此可以看出程序中报的错就是因为MySQL5.6、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语句执行不会抛异常。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • DateFormat 线程不安全

    一、测试 测试代码如下:  private static SimpleDateFormat sdf = new SimpleDateFormat("yy...

    囚兔
  • Thrift抛直接内存OOM一点解决思路

    最近使用Thrift TThreadedSelectorServer服务方式,运行一段时间就会抛OutOfMemoryError: Direct buffer ...

    囚兔
  • 通过Java代码来模拟乘法器

    cpu中乘法器的执行流程 ? Java模拟乘法器代码 /** * 32 bit multiplier mock * @param a...

    囚兔
  • 时间复杂度中的log(n)底数到底是多少?

    假设有底数为2和3的两个对数函数,如上图。当X取N(数据规模)时,求所对应的时间复杂度得比值,即对数函数对应的y值,用来衡量对数底数对时间复杂度的影响。

    城市中的游牧民族
  • SQL Server索引简介:SQL Server索引进阶 Level 1

    Woodson
  • 6 图助你理解 SQL 优化策略

    玩 SQL 1 - 2 年的朋友,对于 Execution Plan (执行计划)估计不陌生了。但也有特例,3 - 4 年的朋友有时候也不知道如何查看 Exec...

    Lenis
  • 命令行一键切换java版本的几种方式

    java现在版本发布相对以前比较频繁了,java9还没来得及用,java10就出来了,2018年9月份java11也要来了,于是就有需求在笔记本电脑上装多个版本...

    codecraft
  • 机器学习原来这么有趣!【第二章】:用机器学习制作超级马里奥的关卡

    在第一章中我们谈到,机器学习是用泛型算法告诉你一些有关数据的有趣结论,而这个过程中你不需要写任何与问题有关的特定代码。(如果你还没有读过第一章,现在先去读吧!机...

    lujohn3li
  • Matplotlib 绘2D图

    Matplotlib 是一个非常简单而又完善的开源绘图库。那么它到底有多简单呢? 基本知识 首先官方文档奉上 下面,我们通过 3 行代码绘制一张简单的折线图...

    听城
  • Windows服务器网卡驱动丢失处理方法

    解决方法: VNC登录云服务器,在如图所示路径中找到这个程序,双击打开,选择修复,下一步直至完成,即可恢复正常。

    azhhzhang

扫码关注云+社区

领取腾讯云代金券