关于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 05 MySQL
MySQL 使用SQL语句修改表名的实现
Apr 07 MySQL
mysql5.7使用binlog 恢复数据的方法
Jun 03 MySQL
你知道哪几种MYSQL的连接查询
Jun 03 MySQL
详解MySQL多版本并发控制机制(MVCC)源码
Jun 23 MySQL
Mysql排序的特性详情
Nov 01 MySQL
千万级用户系统SQL调优实战分享
Mar 03 MySQL
解决MySQL添加新用户-ERROR 1045 (28000)的问题
Mar 03 MySQL
MySQL插入数据与查询数据
Mar 25 MySQL
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
Apr 09 MySQL
解决Mysql报错 Table 'mysql.user' doesn't exist
May 06 MySQL
MySQL外键约束(Foreign Key)案例详解
Jun 28 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/02/16 PHP
Django中的cookie与session操作实例代码
2017/08/17 PHP
php源码的使用方法讲解
2019/09/26 PHP
滚动经典最新话题[prototype框架]下编写
2006/10/03 Javascript
jquery插件之easing使用
2010/08/19 Javascript
jQuery.Validate验证库的使用介绍
2013/04/26 Javascript
js调用iframe实现打印页面内容的方法
2014/03/04 Javascript
用模版生成HTML的的框架jquery.tmpl使用详解
2015/01/07 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
js中getBoundingClientRect的作用及兼容方案详解
2018/02/01 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
javascript创建元素和删除元素实例小结
2019/06/19 Javascript
js操作两个json数组合并、去重,以及删除某一项元素
2020/09/22 Javascript
[01:46]DOTA2上海特锦赛小组赛英文解说KotlGuy采访
2016/02/27 DOTA
Python下的Softmax回归函数的实现方法(推荐)
2017/01/26 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
2017/05/18 Python
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
python实现windows下文件备份脚本
2018/05/27 Python
Python线性拟合实现函数与用法示例
2018/12/13 Python
Python 判断奇数偶数的方法
2018/12/20 Python
150行python代码实现贪吃蛇游戏
2020/04/24 Python
Python 中 sorted 如何自定义比较逻辑
2021/02/02 Python
个人评价范文分享
2014/01/11 职场文书
公司同意接收函
2014/01/13 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
自考毕业自我鉴定
2014/03/18 职场文书
文秘专业应届生求职信
2014/05/26 职场文书
上课迟到检讨书300字
2014/10/15 职场文书
2014年关工委工作总结
2014/11/17 职场文书
六年级学生期末评语
2014/12/26 职场文书
2015年教师学期工作总结
2015/04/30 职场文书
Mysql事务索引知识汇总
2022/03/17 MySQL
《火纹风花雪月无双》预告“神秘雇佣兵” 紫发剑客
2022/04/13 其他游戏
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers