关于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字符串截取函数小结
Apr 05 MySQL
Windows10下安装MySQL8
Apr 06 MySQL
数据库连接池
Apr 06 MySQL
MySQL 数据恢复的多种方法汇总
Jun 21 MySQL
解决mysql的int型主键自增问题
Jul 15 MySQL
使用ORM新增数据在Mysql中的操作步骤
Jul 26 MySQL
MySQL空间数据存储及函数
Sep 25 MySQL
mysql分表之后如何平滑上线详解
Nov 01 MySQL
MySQL 服务和数据库管理
Nov 11 MySQL
一文了解MySQL二级索引的查询过程
Feb 24 MySQL
解决MySQL Varchar 类型尾部空格的问题
Apr 06 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+MSSQL分页的例子
2006/10/09 PHP
PHP中isset()和unset()函数的用法小结
2014/03/11 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
jquery监控数据是否变化(修正版)
2011/04/12 Javascript
JS随即打乱数组实现代码
2012/12/03 Javascript
javascript重复绑定事件造成的后果说明
2013/03/02 Javascript
js 判断控件获得焦点的示例代码
2014/03/04 Javascript
JS数组的赋值介绍
2014/03/10 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
2014/08/24 Javascript
JavaScript采用递归算法计算阶乘实例
2015/08/04 Javascript
jquery实现点击展开列表同时隐藏其他列表
2015/08/10 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
Bootstrap 布局组件(全)
2016/07/18 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
jQuery实现字符串全部替换的方法【推荐】
2017/03/09 Javascript
pm2 部署 node的三种方法示例
2017/10/20 Javascript
JS实现标签滚动切换效果
2017/12/25 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
JS函数参数的传递与同名参数实例分析
2020/03/16 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
2020/04/20 Javascript
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
启动targetcli时遇到错误解决办法
2017/10/26 Python
Flask-Mail用法实例分析
2018/07/21 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
python 常见字符串与函数的用法详解
2018/11/23 Python
深入解析python中的实例方法、类方法和静态方法
2019/03/11 Python
HTML5实现锚点时请使用id取代name
2013/09/06 HTML / CSS
H5新属性audio音频和video视频的控制详解(推荐)
2016/12/09 HTML / CSS
SkinCeuticals官网:美国药妆品牌
2018/04/19 全球购物
Haggar官网:美国男装品牌
2020/02/16 全球购物
聚美优品广告词改编
2014/03/14 职场文书
大型演出策划方案
2014/05/28 职场文书
指导教师推荐意见
2015/06/05 职场文书
Python面向对象之成员相关知识总结
2021/06/24 Python
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server