表1和表2是不同数据库中的同名table,但是发现表1中的查询和表2中的查询有区别,(事实是表1的查询是对的。)表1的查询结果
mysql> select  * from slot_value where slot_type_id='09FDBC8081294EF09D65F909E7FD9DE3' and slot_value='a bout de souffle'  ;
+---------+----------------------------------+-------------------+
| id      | slot_type_id                     | slot_value        |
+---------+----------------------------------+-------------------+
| 2316211 | 09FDBC8081294EF09D65F909E7FD9DE3 | a bout de souffle |
+---------+----------------------------------+-------------------+
1 row in set (0.02 sec)
mysql> select  * from slot_value where slot_type_id='09FDBC8081294EF09D65F909E7FD9DE3' and slot_value='à bout de souffle'  ;;
+---------+----------------------------------+--------------------+
| id      | slot_type_id                     | slot_value         |
+---------+----------------------------------+--------------------+
| 2316212 | 09FDBC8081294EF09D65F909E7FD9DE3 | à bout de souffle  |
+---------+----------------------------------+--------------------+
1 row in set (0.05 sec)表2的查询结果
mysql> select  * from back_brace.slot_value where slot_type_id='09FDBC8081294EF09D65F909E7FD9DE3' and slot_value='a bout de souffle'  ;
+---------+----------------------------------+--------------------+
| id      | slot_type_id                     | slot_value         |
+---------+----------------------------------+--------------------+
| 1109666 | 09FDBC8081294EF09D65F909E7FD9DE3 | a bout de souffle  |
| 1109667 | 09FDBC8081294EF09D65F909E7FD9DE3 | à bout de souffle  |
+---------+----------------------------------+--------------------+
2 rows in set (2.65 sec)囧了,竟然遇到上面的情况。。。。。。
但是通过查看对应的编码,是不同的:
mysql> select hex('a')-> ;
+----------+
| hex('a') |
+----------+
| 61       |
+----------+
1 row in set (0.01 sec)mysql> select hex('à');
+-----------+
| hex('à')  |
+-----------+
| C3A0      |
+-----------+
1 row in set (0.01 sec)接下来怀疑的是,表结构是否相同?
表1:
slot_value | CREATE TABLE `slot_value` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`slot_type_id` varchar(36) COLLATE utf8_bin NOT NULL COMMENT 'slot类型id',`slot_value` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'slot值',PRIMARY KEY (`id`),UNIQUE KEY `slot_value_uniq_index` (`slot_type_id`,`slot_value`,`out_value`),KEY `slot_type_id` (`slot_type_id`),KEY `slot_value_type_index` (`type`),KEY `slot_value_type_id_index` (`slot_type_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3762859 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='保存slot类型对应的值信息表,一个slot类型可以有多个slot_value值' |表2:
| slot_value | CREATE TABLE `slot_value` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`slot_type_id` varchar(36) NOT NULL COMMENT 'slot类型id',`slot_value` varchar(255) NOT NULL COMMENT 'slot值',PRIMARY KEY (`id`),KEY `index_slot_type_id` (`slot_type_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2309045 DEFAULT CHARSET=utf8 COMMENT='保存slot类型对应的值信息表,一个slot类型可以有多个slot_value值' 发现表1和表2的不同之处,在于建表语句的稍微不同,表1的建表语句中有 COLLATE=utf8_bin,表2没有这句。
将表2修改表结构,增加表1中有的COLLATE=utf8_bin,修改的方法如下
alter table slot_value CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
修改后表结构如下:
slot_value | CREATE TABLE `slot_value` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`slot_type_id` varchar(36) COLLATE utf8_bin NOT NULL COMMENT 'slot类型id',`slot_value` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'slot值',PRIMARY KEY (`id`),KEY `index_slot_type_id` (`slot_type_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2309045 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='保存slot类型对应的值信息表,一个slot类型可以有多个slot_value值'   再在表2上执行查询语句:
mysql> select * from slot_value where slot_type_id='09FDBC8081294EF09D65F909E7FD9DE3' and slot_value='à bout de souffle';
+---------+----------------------------------+--------------------+
| id      | slot_type_id                     | slot_value         |
+---------+----------------------------------+--------------------+
| 1109667 | 09FDBC8081294EF09D65F909E7FD9DE3 | à bout de souffle  |
+---------+----------------------------------+--------------------+
1 row in set (2.07 sec)mysql> select * from slot_value where slot_type_id='09FDBC8081294EF09D65F909E7FD9DE3' and slot_value='a bout de souffle';
+---------+----------------------------------+-------------------+
| id      | slot_type_id                     | slot_value        |
+---------+----------------------------------+-------------------+
| 1109666 | 09FDBC8081294EF09D65F909E7FD9DE3 | a bout de souffle |
+---------+----------------------------------+-------------------+
1 row in set (2.34 sec)完美解决问题。。。
但是为什么呢?原来MySQL按照下面的方式选择表字符集和 校对规则:
如果指定了CHARACTER SET X和COLLATE Y,那么采用CHARACTER SET X和COLLATE Y。
如果指定了CHARACTER SET X而没有指定COLLATE Y,那么采用CHARACTER SET X和CHARACTER SET X的默认校对规则。
否则,采用服务器字符集和服务器校对规则。
而我们在建表的时候指定了character set,所以它永远是采用对应的默认的校对规则。
当然我们其实也没必要重建表格,只需要alter table db_allot CONVERT TO CHARACTER SET latin1 COLLATE latin1_bin这样转换即可。
另外建议collation都尽量采用字符集相应的bin类型的校对规则,这样不容易出错。此外遇到这种情况,不用逐个改字段属性,而只要表格级别的collation就行了。
(对MySQL数据库中的varchar字段有效)参考文档《MySQL 的 collation》:http://blog.csdn.net/xfsnow/article/details/2885948

深入的介绍,待续。。。

转载于:https://www.cnblogs.com/zhzhang/p/6895636.html

Mysql通过一个限制条件,查出多条不同的记录相关推荐

  1. MySQL去重查询只保留一条最新的记录

    需求:MySQL去重查询只保留一条最新的记录 文章目录 易错的写法 正确的写法-1 正确的写法-2 正确的写法-3 易错的写法 表结构与初始数据如下SQL文件: -- MySQL dump 10.13 ...

  2. mysql语句统计总数_SQL一条语句统计记录总数及各状态数

    SQL一条语句统计记录总数及各状态数 方法一. 代码如下: SELECT SUM(正确数)+SUM(错误数) AS 总记录数,SUM(正确数),SUM(错误数) FROM ( SELECT COUNT ...

  3. mysql 不同的记录_Mysql通过一个限制条件,查出多条不同的记录

    表1和表2是不同数据库中的同名table,但是发现表1中的查询和表2中的查询有区别,(事实是表1的查询是对的.) 表1的查询结果 mysql> select * from slot_value ...

  4. mysql数据库一个表20万条数据可以_mysql生成20万条数据(连表插入)

    创建一个存储过程 DELIMITER $$ -- 设置定界符为$$,与';'意思相同,防止相同符号产生冲突 USE `yunkc_base1`$$ -- 使用数据库 DROP PROCEDURE IF ...

  5. mysql从一个表查出写入另一个表_sql语句 怎么从一张表中查询数据插入到另一张表中...

    展开全部 sql语句从一张表中查询数据插入到另一张表中的方法如下:e68a843231313335323631343130323136353331333365653762 1.select * int ...

  6. linq 查出一条最大的记录_洛龙是最大的湾鳄吗?当然不是,比它更大的至少还有6条...

    湾鳄,又称咸水鳄.河口鳄,是现存最大的鳄目动物以及最大的爬行动物,在各地的传说当中,湾鳄都是一种残暴的食人巨怪,湾鳄确实有大量的食人记录,但人们对于湾鳄的敬畏多于恐惧. 湾鳄现分布于马来群岛.澳洲北部 ...

  7. mysql分组查询选择数量最多的前十个_mysql 查询每一个分组前N条记录

    mysql 查询每一个分组前N条记录html 假设存在表movie,  有字段 id, part(地区), mcount(观看次数)mysql 现查询每一个地区观看次数最多的3部movie, 则表sq ...

  8. mysql查询去重第一条_Mysql用法记录 - Ashley-OSCHINA的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.查询某个字段,在数据库不重复的条数(去重查询) select count(distinct item_uid) from supply_order; 查询 表 supply_order 中 ite ...

  9. mysql取分组最新的一条_mysql group by之后取每个分组最新的一条

    最近遇到一个需求就是需要从mysql中根据id查出一组数据,该组数据有36个类型,每种类型每天都会插入一条新的数据,然后我要拿每个类型的最新一条出来. -- 首先我想的是,先按照类型分组,然后在按照时 ...

最新文章

  1. Go 语言web 框架 Gin 练习5
  2. 中国的四大沙地,你都认识吗?
  3. Springboot07配制数据统一返回格式以及定义统一的异常处理类
  4. HTML5学习笔记简明版(5):input的type超级类型
  5. 信号检测与估计理论pdf
  6. 图像效果的一些专业测试工具和指标:
  7. 制作 jvm 火焰图
  8. Scrapy-豆瓣电影Top250
  9. love2d ffi 窗口移动
  10. wps合并重复项并求和_wps中在同一张表格中怎么将相同项合并并求和
  11. 阳春三月,激情飞扬,c/c++0313就业班开班啦!
  12. MySQL小数数据类型
  13. itan:cookie-session简介
  14. 系统中负负得正的兼容逻辑也许暂时能跑起来, 但迟早会坑人!
  15. 彻底解决DNS劫持污染,如何彻底解决DNS劫持污染,方法介绍
  16. 在一起计时器_如何在纯JAVASCRIPT中构建倒数计时器
  17. Android内、外存储 易混淆点剖析(/mnt/sdcard、/storage/sdcard0、/storage/emulated/0等区别)
  18. 纯CSS实现正方形、自适应正方形方法
  19. 2023北京大学计算机考研信息汇总
  20. 光传感器类有哪些最新发表的毕业论文呢?

热门文章

  1. 网络存储(三)之ISCSI搭建的入门
  2. Foundation框架集合 ---- NSArray和NSMutableArray
  3. lucene 建索引
  4. U盘被写保护的解决办法
  5. failed to load kernel library!处理办法
  6. 整理了一个带语法高亮显示,及到处html功能的richtextbox控件
  7. python列表有哪些操作_python列表的基本操作有哪些
  8. excel甘特图模板_最简单的Excel甘特图制作方法,只用一条公式,项目进度一目了然...
  9. java struts2国际化代码下载_【Java框架】java struts2框架中页面表示国际化的方法 - 思诚科技...
  10. Python机器学习:梯度下降法005梯度下降法和数据标准化