关于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基础知识点汇总
May 26 MySQL
浅谈mysql返回Boolean类型的几种情况
Jun 04 MySQL
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
Jul 01 MySQL
MySQL8.0的WITH查询详情
Aug 30 MySQL
MySQL悲观锁与乐观锁的实现方案
Nov 02 MySQL
mysql中varchar类型的日期进行比较、排序等操作的实现
Nov 17 MySQL
MySQL如何快速创建800w条测试数据表
Mar 17 MySQL
mysql使用 not int 子查询隐含陷阱
Apr 12 MySQL
优化Mysql查询的示例
Apr 26 MySQL
MYSQL常用函数介绍
May 05 MySQL
MySQL8.0 Undo Tablespace管理详解
Jun 16 MySQL
关于MySQL中explain工具的使用
May 08 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
咖啡界又出新概念,无需咖啡豆的分子咖啡
2021/03/03 咖啡文化
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
php中常用的预定义变量小结
2012/05/09 PHP
解析获取优酷视频真实下载地址的PHP源代码
2013/06/26 PHP
php采用file_get_contents代替使用curl实例
2014/11/07 PHP
php去除数组中重复数据
2014/11/18 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
在textarea中显示html页面的javascript代码
2007/04/20 Javascript
js获取url参数的使用扩展实例
2007/12/29 Javascript
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
js给dropdownlist添加选项的小例子
2013/03/04 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
Jquery中扩展方法extend使用技巧
2014/08/24 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
2015/08/31 Javascript
PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解
2015/10/09 Javascript
Angularjs中三种数据的绑定策略(“@”,“=”,“&”)
2016/12/23 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
nodejs使用express获取get和post传值及session验证的方法
2017/11/09 NodeJs
详解JavaScript 的执行机制
2020/09/18 Javascript
[01:01:52]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第二场 1月9日
2021/03/11 DOTA
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
2020/03/13 Python
python 3.8.3 安装配置图文教程
2020/05/21 Python
Python 添加文件注释和函数注释操作
2020/08/09 Python
表达自我的市场:Society6
2018/08/01 全球购物
高三自我鉴定怎么写
2013/10/19 职场文书
自我评价个人范文
2013/12/16 职场文书
合作意向书范本
2014/03/31 职场文书
工作失误检讨书范文
2015/01/26 职场文书
父亲去世追悼词
2015/06/23 职场文书
优秀员工演讲稿
2019/06/21 职场文书
Python中的套接字编程是什么?
2021/06/21 Python
Android 界面一键变灰 深色主题工具类
2022/04/28 Java/Android
OpenFeign实现远程调用
2022/08/14 Java/Android