关于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 06 MySQL
MySQL sql_mode修改不生效的原因及解决
May 07 MySQL
IDEA 链接Mysql数据库并执行查询操作的完整代码
May 20 MySQL
Navicat连接MySQL错误描述分析
Jun 02 MySQL
JMeter对MySQL数据库进行压力测试的实现步骤
Jan 22 MySQL
Mysql InnoDB 的内存逻辑架构
May 06 MySQL
sql查询语句之平均分、最高最低分及排序语句
May 30 MySQL
MySQL普通表如何转换成分区表
May 30 MySQL
MySQL 语句执行顺序举例解析
Jun 05 MySQL
mysql实现将字符串字段转为数字排序或比大小
Jun 14 MySQL
MySQL慢查询中的commit慢和binlog中慢事务的区别
Jun 16 MySQL
MySQL数据库实验之 触发器和存储过程
Jun 21 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
手把手教你使用DedeCms V3的在线采集图文教程
2007/04/03 PHP
PHP Session机制简介及用法
2014/08/19 PHP
php中静态类与静态变量用法的区别分析
2015/01/15 PHP
js使用for循环与innerHTML获取选中tr下td值
2014/09/26 Javascript
jquery弹出遮掩层效果【附实例代码】
2016/04/28 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
2020/10/26 Javascript
JavaScript中值类型和引用类型的区别
2017/02/23 Javascript
jquery实现静态搜索功能(可输入搜索文字)
2017/03/28 jQuery
详解Vue一个案例引发「内容分发slot」的最全总结
2018/12/02 Javascript
npm 常用命令详解(小结)
2019/01/17 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
2019/04/17 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
Vue管理系统前端之组件拆分封装详解
2020/08/23 Javascript
python基础教程之Hello World!
2014/08/29 Python
python处理Excel xlrd的简单使用
2017/09/12 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
Python解析命令行读取参数--argparse模块使用方法
2018/01/23 Python
pyQt4实现俄罗斯方块游戏
2018/06/26 Python
pandas的唯一值、值计数以及成员资格的示例
2018/07/25 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
django model通过字典更新数据实例
2020/04/01 Python
在python3.64中安装pyinstaller库的方法步骤
2020/06/02 Python
Python第三方库安装缓慢的解决方法
2021/02/06 Python
企业管理部经理岗位职责
2013/12/24 职场文书
《愚公移山》教学反思
2014/02/20 职场文书
调解协议书
2014/04/16 职场文书
廉洁教育学习材料
2014/05/19 职场文书
入职担保书范文
2014/05/21 职场文书
法英专业大学生职业生涯规划范文:衡外情,量己力!
2014/09/23 职场文书
普通党员个人剖析材料
2014/10/08 职场文书
晋江市委常委班子四风问题整改工作方案
2014/10/26 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js
Python Django搭建文件下载服务器的实现
2021/05/10 Python
不负正版帝国之名 《重返帝国》引领SLG手游制作新的标杆
2022/04/07 其他游戏
JS前端轻量fabric.js系列物体基类
2022/08/05 Javascript