现有两张表goodscategory(注意两张表的字符集不同):

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条件中字符集转换相关推荐

  1. MySQL查询条件中的各种运算符/操作符说明

    文章目录 一.比较运算符 (一)正则表达式 (二)模糊匹配 LIKE (三)转义字符 二.单行比较运算符 (一)安全等号 <=> 1. 和 = 的相同点 2. 和 = 的不同点 (二)区间 ...

  2. mysql if 多个,mysql if条件中的多个条件

    mysql的新手,所以我不确定我是否正确地问了这个问题.我试图将多个参数添加到if语句中.我正在尝试检查两队之间的比赛是否是联赛. SELECT visitor AS school, home AS ...

  3. 【MySQL】故障分析 | MySQL 优化案例 - 字符集转换

    1.概述 好文章转载:故障分析 | MySQL 优化案例 - 字符集转换 一.背景 开发联系我,说是开发库上有一张视图查询速度很慢,9000 条数据要查 10s,要求我这边协助排查优化. 二.问题 S ...

  4. 彻底理解mysql服务器的字符集转换问题

    主要参考这三个文章: https://www.xiariboke.com/article/4147.html http://blog.sina.com.cn/s/blog_690c46500100k1 ...

  5. mysql数据库的字符集_mysql数据库中字符集乱码问题原因及解决

    前言 有的时候我们在查看数据库数据时,会看到乱码.实际上,无论何种数据库只要出现乱码问题,这大多是由于数据库字符集设定的问题. 下面我们就介绍一下,数据库的字符集的设定及乱码问题的解决. mysql数 ...

  6. Mysql 数据库字符集转换及版本升级/降级的详细教程

    本文为穆亦风原创,原帖地址 http://club.muzone.cn/viewthread.php?tid=28605 转贴请注明出处,非常感谢! 最近discuz发布了新的版本,免费了,用的人更多 ...

  7. mysql 数据库字符集转换_字符集介绍及mysql数据库编码转换

    一.字符集介绍: 1.ASCII ASCII是英文American Standard Code for Information Interchange的缩写,美国标准信息交换代码是由美国国家标准学会( ...

  8. mysql按条件提取数据库_SQL中的where条件,在数据库中提取与应用浅析

    1        问题描述 一条SQL,在数据库中是如何执行的呢?相信很多人都会对这个问题比较感兴趣.当然,要完整描述一条SQL在数据库中的生命周期,这是一个非常巨大的问题,涵盖了SQL的词法解析.语 ...

  9. MySQL和Oracle中的隐式转换

    今天在处理一个问题的时候,需要根据其他部门提供的sql语句对一个表中的数据进行了筛查. 语句类似下面的形式 > SELECT MAX_LEVEL,LOGOUT_TIME,CURRENT_DATE ...

最新文章

  1. 干得累死,并不见得老板就待见你?——来自多位专家的见解
  2. 想非常牛掰的在WORD中调中多级符号吗
  3. crt中 新建的连接存储在哪_连接昌邑路和浦东大道,这条新建道路的规划设计方案公示中...
  4. [翻译] WindowsPhone-GameBoy模拟器开发二--Rom文件分析
  5. 同行不支持鸿蒙系统,鸿蒙系统虽好,但也需要国内同行支持
  6. Linux 下如何查询 tomcat 的安装目录
  7. [转]ASP中ActiveX控件的内嵌及调用
  8. mysql 字符串枚举类型转换_MyBatis里字段到枚举类型的转换/映射
  9. 23. jQuery 遍历 - 过滤
  10. diablo2oo2’s Universal Patcher 中文汉化绿色破解版下载
  11. 2014年上半年计算机试题,2014年上半年程序员考试上午试题及答案
  12. matlab画带有正态密度曲线的直方图
  13. 快速原型制造_快速原型初学者指南
  14. 谷歌学术搜索 2019
  15. 给设计师的建设性反馈
  16. 祝贺自己获得CSDN2018 博客之星
  17. Unity 基础 之 在 UGUI 上简单实现VideoPlayer视频播放的功能,简单暂停播放/显示视频名称/显示时长/拖拽播放等
  18. word2016背景色如何设置为保护眼睛的苹果绿
  19. 【技术分享】IS-IS 概述
  20. 洛谷P1830 轰炸

热门文章

  1. 音乐制作软件中文版-Studio One 4.5.1 WiN-MAC
  2. USB2.0传输速率
  3. signal 的冰山理论 -- Linux Kernel 实现赏析
  4. 关于天网maze群组的研究
  5. 家庭账务管理系统html,兴华家庭理财管理系统
  6. 全国第一个永久性免费OA办公系统
  7. Navicat_for_MySQL_10.0.11.0_XiaZaiBa
  8. w3cshool之JavaScript 基础
  9. 积化和差公式与和差化积公式
  10. 智慧城市交通的要素:路口监管可视化系统的解决方案