关于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 相关文章推荐
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
Apr 05 MySQL
MySQL sql_mode的使用详解
May 08 MySQL
MySql 8.0及对应驱动包匹配的注意点说明
Jun 23 MySQL
为什么MySQL选择Repeatable Read作为默认隔离级别
Jul 26 MySQL
SQL实现LeetCode(175.联合两表)
Aug 04 MySQL
mysql配置SSL证书登录的实现
Sep 04 MySQL
千万级用户系统SQL调优实战分享
Mar 03 MySQL
MySQL中一条update语句是如何执行的
Mar 16 MySQL
一条慢SQL语句引发的改造之路
Mar 16 MySQL
一次Mysql update sql不当引起的生产故障记录
Apr 01 MySQL
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
Apr 20 MySQL
深入理解MySQL中MVCC与BufferPool缓存机制
May 25 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 include加载文件两种方式效率比较
2010/08/08 PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
2015/04/15 PHP
php封装的连接Mysql类及用法分析
2015/12/10 PHP
smarty高级特性之对象的使用方法
2015/12/25 PHP
PHP中利用sleep函数实现定时执行功能实现代码
2016/08/25 PHP
PHP清除缓存的几种方法总结
2017/09/12 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
IE6弹出“已终止操作”的解决办法
2010/11/27 Javascript
jsTree 基于JQuery的排序节点 Bug
2011/07/26 Javascript
jquery datepicker参数介绍和示例
2014/04/15 Javascript
jQuery获取对象简单实现方法小结
2014/10/30 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
详解cordova打包成webapp的方法
2017/10/18 Javascript
javaScript日期工具类DateUtils详解
2017/12/08 Javascript
浅谈在vue中使用mint-ui swipe遇到的问题
2018/09/27 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
2019/11/13 Javascript
[03:00]2018完美盛典_最佳英雄奖
2018/12/17 DOTA
Python是编译运行的验证方法
2015/01/30 Python
Python中elasticsearch插入和更新数据的实现方法
2018/04/01 Python
django反向解析URL和URL命名空间的方法
2018/06/05 Python
python爬取足球直播吧五大联赛积分榜
2018/06/13 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
2019/07/01 Python
Python爬取12306车次信息代码详解
2020/08/12 Python
深入浅析css3 border-image边框图像详解
2015/11/24 HTML / CSS
椰子猫砂:CatSpot
2018/08/27 全球购物
世界上最受欢迎的花店:1-800-Flowers.com
2020/06/01 全球购物
linux下进程间通信的方式
2013/01/23 面试题
历史专业个人求职信分享
2013/12/20 职场文书
幼教简历自我评价
2014/01/28 职场文书
手机促销活动方案
2014/02/05 职场文书
校园文明标语
2014/06/13 职场文书
银行求职自荐信
2014/06/30 职场文书
省级三好学生主要事迹材料
2015/11/03 职场文书
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL