mysql where条件中字符集转换
现有两张表goods
和category
(注意两张表的字符集不同):
CREATE TABLE `goods` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id ',`goods_no` char(10) CHARACTER SET sjis NOT NULL COMMENT '商品编码',`goods_name` varchar(255) CHARACTER SET sjis NOT NULL COMMENT '商品名称',`category_no` char(10) NOT NULL COMMENT '所属分类编码',PRIMARY KEY (`id`),KEY `idx_goods_no` (`goods_no`),KEY `idx_category_no` (`category_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
CREATE TABLE `category` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',`category_no` char(10) CHARACTER SET utf8 NOT NULL COMMENT '商品分类编码',`category_name` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '名称',PRIMARY KEY (`id`),KEY `idx_category_no` (`category_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='商品分类表';
其中goods
表中的category_no
关联category
表中的category_no
现在要关联查询两张表,分别用三条sql查询,分析执行计划:
1,EXPLAIN SELECT g.* FROM goods g LEFT JOIN category c ON g.category_no = c.category_no where goods_no='10000';
执行计划如下:
2,EXPLAIN SELECT g.* FROM goods g LEFT JOIN category c ON CONVERT ( g.category_no USING utf8 ) = c.category_no where goods_no='10000';
执行计划如下:
3,EXPLAIN SELECT g.* FROM goods g LEFT JOIN category c ON g.category_no = CONVERT ( c.category_no USING utf8mb4 ) where goods_no='10000';
执行计划如下:
看到没,第3条sql即使转换了字符集,也和第1条执行计划一样(这里possible_keys显示为空,key显示用到了索引;实际我在线上遇到的是key列也没有走索引的,导致查询很慢)
而第二条sql,将字符集转换convert放到了=
前边,执行计划中 type列为ref,用到了索引。
疑问 有没有大神知道这是为什么?字符集转换convert放到=
左边和右边有什么区别?为什么放到左边才会走索引?
mysql where条件中字符集转换相关推荐
- MySQL查询条件中的各种运算符/操作符说明
文章目录 一.比较运算符 (一)正则表达式 (二)模糊匹配 LIKE (三)转义字符 二.单行比较运算符 (一)安全等号 <=> 1. 和 = 的相同点 2. 和 = 的不同点 (二)区间 ...
- mysql if 多个,mysql if条件中的多个条件
mysql的新手,所以我不确定我是否正确地问了这个问题.我试图将多个参数添加到if语句中.我正在尝试检查两队之间的比赛是否是联赛. SELECT visitor AS school, home AS ...
- 【MySQL】故障分析 | MySQL 优化案例 - 字符集转换
1.概述 好文章转载:故障分析 | MySQL 优化案例 - 字符集转换 一.背景 开发联系我,说是开发库上有一张视图查询速度很慢,9000 条数据要查 10s,要求我这边协助排查优化. 二.问题 S ...
- 彻底理解mysql服务器的字符集转换问题
主要参考这三个文章: https://www.xiariboke.com/article/4147.html http://blog.sina.com.cn/s/blog_690c46500100k1 ...
- mysql数据库的字符集_mysql数据库中字符集乱码问题原因及解决
前言 有的时候我们在查看数据库数据时,会看到乱码.实际上,无论何种数据库只要出现乱码问题,这大多是由于数据库字符集设定的问题. 下面我们就介绍一下,数据库的字符集的设定及乱码问题的解决. mysql数 ...
- Mysql 数据库字符集转换及版本升级/降级的详细教程
本文为穆亦风原创,原帖地址 http://club.muzone.cn/viewthread.php?tid=28605 转贴请注明出处,非常感谢! 最近discuz发布了新的版本,免费了,用的人更多 ...
- mysql 数据库字符集转换_字符集介绍及mysql数据库编码转换
一.字符集介绍: 1.ASCII ASCII是英文American Standard Code for Information Interchange的缩写,美国标准信息交换代码是由美国国家标准学会( ...
- mysql按条件提取数据库_SQL中的where条件,在数据库中提取与应用浅析
1 问题描述 一条SQL,在数据库中是如何执行的呢?相信很多人都会对这个问题比较感兴趣.当然,要完整描述一条SQL在数据库中的生命周期,这是一个非常巨大的问题,涵盖了SQL的词法解析.语 ...
- MySQL和Oracle中的隐式转换
今天在处理一个问题的时候,需要根据其他部门提供的sql语句对一个表中的数据进行了筛查. 语句类似下面的形式 > SELECT MAX_LEVEL,LOGOUT_TIME,CURRENT_DATE ...
最新文章
- 干得累死,并不见得老板就待见你?——来自多位专家的见解
- 想非常牛掰的在WORD中调中多级符号吗
- crt中 新建的连接存储在哪_连接昌邑路和浦东大道,这条新建道路的规划设计方案公示中...
- [翻译] WindowsPhone-GameBoy模拟器开发二--Rom文件分析
- 同行不支持鸿蒙系统,鸿蒙系统虽好,但也需要国内同行支持
- Linux 下如何查询 tomcat 的安装目录
- [转]ASP中ActiveX控件的内嵌及调用
- mysql 字符串枚举类型转换_MyBatis里字段到枚举类型的转换/映射
- 23. jQuery 遍历 - 过滤
- diablo2oo2’s Universal Patcher 中文汉化绿色破解版下载
- 2014年上半年计算机试题,2014年上半年程序员考试上午试题及答案
- matlab画带有正态密度曲线的直方图
- 快速原型制造_快速原型初学者指南
- 谷歌学术搜索 2019
- 给设计师的建设性反馈
- 祝贺自己获得CSDN2018 博客之星
- Unity 基础 之 在 UGUI 上简单实现VideoPlayer视频播放的功能,简单暂停播放/显示视频名称/显示时长/拖拽播放等
- word2016背景色如何设置为保护眼睛的苹果绿
- 【技术分享】IS-IS 概述
- 洛谷P1830 轰炸
热门文章
- 音乐制作软件中文版-Studio One 4.5.1 WiN-MAC
- USB2.0传输速率
- signal 的冰山理论 -- Linux Kernel 实现赏析
- 关于天网maze群组的研究
- 家庭账务管理系统html,兴华家庭理财管理系统
- 全国第一个永久性免费OA办公系统
- Navicat_for_MySQL_10.0.11.0_XiaZaiBa
- w3cshool之JavaScript 基础
- 积化和差公式与和差化积公式
- 智慧城市交通的要素:路口监管可视化系统的解决方案