Mysql字符串被当成十六进制怎么处理?

公司项目用的原生php 封装的mysql php类, 上线已很久, 今天排查一个错误的时候惊现一个奇怪的现象, 让人万分惊恐:

查询 sql: select count(1) as total from tabname where 1=1 and connuid='9E74674'
此sql语句交由mysql query(sql)查询。 connuid varchar(40)

报错: Illegal double '9E74674' value found during parsing

疑问:sql语句已经对查询字符串加了引号处理,为啥还会被自动转换成hex进制了呢?该如何处理呢?


紫衣仙女
浏览 1791回答 2
2回答

拉风的咖菲猫

测试了一下,sql 语句中 9E74674 外不带引号,才会报这个解析错误。64位系统 mysql double 最大值好像是1.7e308不加引号,mysql 把这个 9E74674 当成科学计数法了,想解析成 double,结果超出范围了。我分析是这么回事~

三国纷争

测试没发现会转成小数,show variables like 'general_log%';set global general_log = 'ON';观察变量general_log_file表示的文件, 看实际执行的sql代码.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL