关于mysql中string和number的转换问题


Posted in MySQL onJune 14, 2022

mysql中string和number的转换

今天无意中发现一个很奇怪的现象,在写sql语句的时候,想筛选列值为空字符串的记录,结果把列值为0的记录也一起筛选出来了

总结原因如下

当非同类型比较,等号两边分别为number和string之一时候,mysql会把string类型和number类型进行转换:

(1)数值型字符串

如''、'string'、'abc'等,会转换成0

eg:

select '' = 0 from dual;   ---结果:1
select 'a' = 0 from dual;   ---结果:1

(2)number和string拼接字符串

如'123string'、'0123string'等,会取头部类型进行转换

eg:

select '123abc' = 0 from dual;   ---结果:0
select '123abc' = 123 from dual;   ---结果:1
select '0123abc' = 123 from dual;   ---结果:1
select '123abc' + '23def' from dual;   ---结果:146

(3)string和number拼接字符串

如'string123'、'string0123'等,会取头部类型进行转换

eg:

select 'abc123' = 0 from dual;   ---结果:1
select 'abc123' = 123 from dual;   ---结果:0
select 'abc123' + 'def45' from dual;   ---结果:0

(4)数值型字符串则会转换成相应的number

如'123'->123、'023'->23等

eg:

select '123' = 0 from dual;   ---结果:0
select '123' = 123 from dual;   ---结果:1
select '0123' = 123 from dual;   ---结果:1

(5)number则直接转换成对应的string

eg:

select 123 = '123' from dual;   ---结果:1

所以针对我遇到的问题,mysql把''当成字符串处理,转换成了0,0=0,所以把列值为0的记录也一并筛选了出来

+号的处理方式同理:

如果+号两边类型不一致,则把string转换成number处理

select '0string' + 0 = 'string' from dual;   ---结果:1   '0string' + 0 -> 0 + 0 = 0,0和'string'进行比较
select 'string' = 'string' + 0 from dual;   ---结果:1   'string' + 0 -> 0 + 0 = 0,'string'和0进行比较
select 'string' + 0 = 'string' + 0 from dual;   ---结果:1   'string' + 0 -> 0 + 0 ,0和0进行比较
select 'string' + 0 = 'string' + 1 from dual;   ---结果:0   'string' + 0 -> 0 + 0 ,'string' + 1 -> 0 + 1,0和1进行比较

参考链接:http://stackoverflow.com/questions/22080382/mysql-why-comparing-a-string-to-0-gives-true

附赠mysql文档说明:https://dev.mysql.com/doc/refman/5.7/en/type-conversion.html

mysql中hex、varchar、number相互转换

hex(‘20')= 14
select HEX(20) from DUAL – result: 14

然后这串数字就能变为16进制字符串,只需要加上0x的前缀!

  • UNHEX(‘14’) – 每对十六进制数字转化为一个字符。
  • UNHEX(‘14’),对应 SI, 该字符无法正确输出

但是ORDER BY UNHEX(‘14’) 是可以的。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

MySQL 相关文章推荐
mysql死锁和分库分表问题详解
Apr 16 MySQL
Mysql MVCC机制原理详解
Apr 20 MySQL
MySQL数据迁移相关总结
Apr 29 MySQL
MySQL 重写查询语句的三种策略
May 10 MySQL
详解Mysql和Oracle之间的误区
May 18 MySQL
MySQL中distinct和count(*)的使用方法比较
May 26 MySQL
你知道哪几种MYSQL的连接查询
Jun 03 MySQL
探究Mysql模糊查询是否区分大小写
Jun 11 MySQL
mysql事务对效率的影响分析总结
Oct 24 MySQL
Arthas排查Kubernetes中应用频繁挂掉重启异常
Feb 28 MySQL
Windows下载并安装MySQL8.0.x 版本的完整教程
Apr 10 MySQL
mysql sql常用语句大全
Jun 21 MySQL
mysql实现将字符串字段转为数字排序或比大小
Jun 14 #MySQL
手把手带你彻底卸载MySQL数据库
MYSQL中文乱码问题的解决方案
Jun 14 #MySQL
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
Jun 14 #MySQL
MySql如何将查询的出来的字段进行转换
Jun 14 #MySQL
MySQL安装失败的原因及解决步骤
MySQL范围查询优化的场景实例详解
Jun 10 #MySQL
You might like
表单提交错误后返回内容消失问题的解决方法(PHP网站)
2015/10/20 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
2016/02/15 PHP
PHP7修改的函数
2021/03/09 PHP
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
JavaScript淡入淡出渐变简单实例
2015/08/06 Javascript
在网页中插入百度地图的步骤详解
2016/12/02 Javascript
jQuery联动日历的实例解析
2016/12/02 Javascript
vue一步步实现alert功能
2017/07/05 Javascript
实例分析JS与Node.js中的事件循环
2017/12/12 Javascript
原生JS实现简单的无缝自动轮播效果
2018/09/26 Javascript
React父子组件间的传值的方法
2018/11/13 Javascript
electron制作仿制qq聊天界面的示例代码
2018/11/26 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
2019/04/26 Javascript
微信小程序时间戳转日期的详解
2019/04/30 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
2019/06/24 Javascript
Vue 组件复用多次自定义参数操作
2020/07/27 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
JavaScript实现4位随机验证码的生成
2021/01/28 Javascript
pytorch构建网络模型的4种方法
2018/04/13 Python
python队列queue模块详解
2018/04/27 Python
Python实现获取邮箱内容并解析的方法示例
2018/06/16 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
在Python中实现函数重载的示例代码
2019/12/12 Python
Python序列类型的打包和解包实例
2019/12/21 Python
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
护理专业毕业生自我鉴定总结
2014/03/24 职场文书
大学生求职信范文
2014/05/24 职场文书
优秀员工自荐书
2015/03/06 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
2016年教师节感言
2015/12/09 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
离婚协议书格式范本
2016/03/18 职场文书
2019年大学生职业生涯规划书
2019/03/25 职场文书
Python中的pprint模块
2021/11/27 Python