关于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 08 MySQL
MySQL慢查询的坑
Apr 28 MySQL
MySQL update set 和 and的区别
May 08 MySQL
MySQL 如何分析查询性能
May 12 MySQL
my.ini优化mysql数据库性能的十个参数(推荐)
May 26 MySQL
MYSQL数据库使用UTF-8中文编码乱码的解决办法
May 26 MySQL
MySQL的安装与配置详细教程
Jun 26 MySQL
MySQL系列之七 MySQL存储引擎
Jul 02 MySQL
SQL实现LeetCode(180.连续的数字)
Aug 04 MySQL
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
Apr 12 MySQL
深入理解MySQL中MVCC与BufferPool缓存机制
May 25 MySQL
MySQL数据库配置信息查看与修改方法详解
Jun 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之数据库操作详解及乱码解决!
2007/01/02 PHP
修改php.ini以达到屏蔽错误信息并记录日志
2013/06/16 PHP
体育彩票排列三组选三算法分享
2014/03/07 PHP
ThinkPHP自动完成中使用函数与回调方法实例
2014/11/29 PHP
php 多文件上传的实现实例
2016/10/23 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
用JQuery实现表格隔行变色和突出显示当前行的代码
2012/02/10 Javascript
js window.onload 加载多个函数和追加函数详解
2014/01/08 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
2014/04/25 Javascript
js实现的黑背景灰色二级导航菜单效果代码
2015/08/24 Javascript
跟我学习javascript的this关键字
2020/05/28 Javascript
jQuery根据表单name获取值的方法
2016/05/24 Javascript
JS阻止事件冒泡行为和闭包的方法
2016/06/16 Javascript
Node.js的文件权限及读写flag详解
2016/10/11 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
Angular.JS中select下拉框设置value的方法
2017/06/20 Javascript
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
在Uni中使用Vue的EventBus总线机制操作
2020/07/31 Javascript
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
使用Python编写一个最基础的代码解释器的要点解析
2016/07/12 Python
Python调用C# Com dll组件实战教程
2017/10/12 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
Python安装与基本数据类型教程详解
2019/05/29 Python
安装PyInstaller失败问题解决
2019/12/14 Python
用python实现名片管理系统
2020/06/18 Python
使用OpenCV实现人脸图像卡通化的示例代码
2021/01/15 Python
canvas学习和滤镜实现代码
2018/08/22 HTML / CSS
萌新HTML5 入门指南(二)
2020/11/09 HTML / CSS
儿子婚宴答谢词
2014/01/09 职场文书
春风行动实施方案
2014/03/28 职场文书
服装设计师求职信
2014/06/04 职场文书
2014年药剂科工作总结
2014/11/26 职场文书
纪委立案决定书
2015/06/24 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书