关于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 pt-slave-restart工具的使用简介
Apr 07 MySQL
mysql的MVCC多版本并发控制的实现
Apr 14 MySQL
MySQL创建高性能索引的全步骤
May 02 MySQL
MySQL 数据丢失排查案例
May 08 MySQL
MySQL系列之七 MySQL存储引擎
Jul 02 MySQL
MySQL系列之八 MySQL服务器变量
Jul 02 MySQL
MySQL 5.7常见数据类型
Jul 15 MySQL
MySQL数据库必备之条件查询语句
Oct 15 MySQL
教你如何让spark sql写mysql的时候支持update操作
Feb 15 MySQL
MySQL池化框架学习接池自定义
Jul 23 MySQL
MySQL数据库查询之多表查询总结
Aug 05 MySQL
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
Aug 14 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后退一页表单内容保存实现方法
2012/06/17 PHP
PHP CodeBase:将时间显示为"刚刚""n分钟/小时前"的方法详解
2013/06/06 PHP
PHP简单获取及判断提交来源的方法
2016/04/22 PHP
JavaScript 设计模式 安全沙箱模式
2010/09/24 Javascript
JQuery获取文本框中字符长度的代码
2011/09/29 Javascript
nodeType属性返回被选节点的节点类型介绍
2013/11/22 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
jQuery满屏焦点图左右滚动特效代码分享
2015/09/07 Javascript
简单的分页代码js实现
2016/05/17 Javascript
将form表单通过ajax实现无刷新提交的简单实例
2016/10/12 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
在Vue项目中用fullcalendar制作日程表的示例代码
2019/08/04 Javascript
Vue切换Tab动态渲染组件的操作
2020/09/21 Javascript
Python使用multiprocessing创建进程的方法
2015/06/04 Python
Python编程中的文件读写及相关的文件对象方法讲解
2016/01/19 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
2018/05/24 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2019/06/05 Python
解决python3 安装不了PIL的问题
2019/08/16 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
matplotlib基础绘图命令之errorbar的使用
2020/08/13 Python
英国时尚家具、家居饰品及礼品商店:Graham & Green
2016/09/15 全球购物
建筑工程管理专业自荐信范文
2013/12/28 职场文书
成功的餐厅经营创业计划书
2014/01/15 职场文书
新学期开学寄语
2014/01/18 职场文书
关于逃课的检讨书
2014/01/23 职场文书
公司市场专员岗位职责
2014/06/29 职场文书
踏青活动策划方案
2014/08/19 职场文书
2014年预算员工作总结
2014/12/05 职场文书
老公出轨后的保证书
2015/05/08 职场文书
2015年环保局工作总结
2015/05/22 职场文书
运动会宣传稿100字
2015/07/23 职场文书
XX部保密工作制度范本
2019/08/27 职场文书
JS 4个超级实用的小技巧 提升开发效率
2021/10/05 Javascript