关于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三值逻辑与NULL
May 19 MySQL
MySQL触发器的使用
May 24 MySQL
MySql开发之自动同步表结构
May 28 MySQL
如何搭建 MySQL 高可用高性能集群
Jun 21 MySQL
Mysql8.0递归查询的简单用法示例
Aug 04 MySQL
详细聊聊关于Mysql联合查询的那些事儿
Oct 24 MySQL
MySQL数据库⾼可⽤HA实现小结
Jan 22 MySQL
mysql下的max_allowed_packet参数设置详解
Feb 12 MySQL
MySQL七大JOIN的具体使用
Feb 28 MySQL
MySQ InnoDB和MyISAM存储引擎介绍
Apr 26 MySQL
mysql性能优化以及配置连接参数设置
May 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基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
php中隐形字符65279(utf-8的BOM头)问题
2014/08/16 PHP
PHP简单创建压缩图的方法
2016/08/24 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
极酷的javascirpt,让你随意编辑任何网页
2007/02/25 Javascript
nodejs实用示例 缩址还原
2010/12/28 NodeJs
jQuery实现用户注册的表单验证示例
2013/08/28 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
鼠标悬浮显示二级菜单效果的jquery实现
2014/10/29 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
2016/06/12 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
微信小程序 仿猫眼实现实例代码
2017/03/14 Javascript
vue教程之toast弹框全局调用示例详解
2020/08/24 Javascript
javascript原生封装一个淡入淡出效果的函数测试实例代码
2018/03/19 Javascript
详解vue组件开发脚手架
2018/06/15 Javascript
vuejs实现折叠面板展开收缩动画效果
2018/09/06 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
浅析Vue 防抖与节流的使用
2019/11/14 Javascript
npm qs模块使用详解
2020/02/07 Javascript
Python之py2exe打包工具详解
2017/06/14 Python
Python实现树的先序、中序、后序排序算法示例
2017/06/23 Python
Python 闭包的使用方法
2017/09/07 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
2018/01/31 Python
Python使用functools实现注解同步方法
2018/02/06 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
2019/11/01 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
HTML5新标签兼容——> 的两种方法
2018/09/12 HTML / CSS
AmazeUI 缩略图的实现示例
2020/08/18 HTML / CSS
Skyscanner新西兰:全球领先的旅游搜索网站
2019/08/26 全球购物
宿舍卫生检讨书
2014/01/16 职场文书
班组长岗位职责
2014/03/03 职场文书
党员干部对十八届四中全会的期盼
2014/10/17 职场文书
党的群众路线教育实践活动个人整改措施
2014/10/27 职场文书