关于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 22 MySQL
MySQL 8.0 之不可见列的基本操作
May 20 MySQL
Mysql数据库索引面试题(程序员基础技能)
May 31 MySQL
MySQL系列之十三 MySQL的复制
Jul 02 MySQL
MySQL中的引号和反引号的区别与用法详解
Oct 24 MySQL
Mysql中有关Datetime和Timestamp的使用总结
Dec 06 MySQL
Mysql中一千万条数据怎么快速查询
Dec 06 MySQL
MySQL的InnoDB存储引擎的数据页结构详解
Mar 03 MySQL
Mysql事务索引知识汇总
Mar 17 MySQL
MySQL数据库优化之通过索引解决SQL性能问题
Apr 10 MySQL
mysql 索引的数据结构为什么要采用B+树
Apr 26 MySQL
Mysql数据库group by原理详解
Jul 07 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性能的编码技巧以及性能优化详细解析
2013/08/24 PHP
PHP生成制作验证码的简单实例
2016/06/12 PHP
JS对象与JSON格式数据相互转换
2012/02/20 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
javascript常用正则表达式汇总
2015/07/31 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
JS函数的定义与调用方法推荐
2016/05/12 Javascript
Google 地图API Map()构造器详解
2016/08/06 Javascript
简单实现JavaScript图片切换效果
2016/11/28 Javascript
Vue.JS入门教程之自定义指令
2016/12/08 Javascript
原生js实现淘宝购物车功能
2020/06/23 Javascript
jQuery实现字符串全部替换的方法【推荐】
2017/03/09 Javascript
Node.js常用工具之util模块
2017/03/09 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
基于 Vue 实现一个酷炫的 menu插件
2017/11/14 Javascript
React组件refs的使用详解
2018/02/09 Javascript
js实现开关灯效果
2020/03/30 Javascript
如何用JS模拟实现数组的map方法
2020/07/30 Javascript
python实现支持目录FTP上传下载文件的方法
2015/06/03 Python
在Django框架中编写Context处理器的方法
2015/07/20 Python
python fabric实现远程部署
2017/01/05 Python
Python遍历文件夹和读写文件的实现方法
2017/05/10 Python
pandas Dataframe行列读取的实例
2018/06/08 Python
python 字典 按key值大小 倒序取值的实例
2018/07/06 Python
django foreignkey外键使用的例子 相当于left join
2019/08/06 Python
正则给header的冒号两边参数添加单引号(Python请求用)
2019/08/09 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
pygame实现飞机大战
2020/03/11 Python
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物
简历中的自我评价怎么写
2014/01/29 职场文书
2014年民政工作总结
2014/11/26 职场文书
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS
vue实现列表拖拽排序的示例代码
2022/04/08 Vue.js