Mysql通过一个限制条件,查出多条不同的记录
表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通过一个限制条件,查出多条不同的记录相关推荐
- MySQL去重查询只保留一条最新的记录
需求:MySQL去重查询只保留一条最新的记录 文章目录 易错的写法 正确的写法-1 正确的写法-2 正确的写法-3 易错的写法 表结构与初始数据如下SQL文件: -- MySQL dump 10.13 ...
- mysql语句统计总数_SQL一条语句统计记录总数及各状态数
SQL一条语句统计记录总数及各状态数 方法一. 代码如下: SELECT SUM(正确数)+SUM(错误数) AS 总记录数,SUM(正确数),SUM(错误数) FROM ( SELECT COUNT ...
- mysql 不同的记录_Mysql通过一个限制条件,查出多条不同的记录
表1和表2是不同数据库中的同名table,但是发现表1中的查询和表2中的查询有区别,(事实是表1的查询是对的.) 表1的查询结果 mysql> select * from slot_value ...
- mysql数据库一个表20万条数据可以_mysql生成20万条数据(连表插入)
创建一个存储过程 DELIMITER $$ -- 设置定界符为$$,与';'意思相同,防止相同符号产生冲突 USE `yunkc_base1`$$ -- 使用数据库 DROP PROCEDURE IF ...
- mysql从一个表查出写入另一个表_sql语句 怎么从一张表中查询数据插入到另一张表中...
展开全部 sql语句从一张表中查询数据插入到另一张表中的方法如下:e68a843231313335323631343130323136353331333365653762 1.select * int ...
- linq 查出一条最大的记录_洛龙是最大的湾鳄吗?当然不是,比它更大的至少还有6条...
湾鳄,又称咸水鳄.河口鳄,是现存最大的鳄目动物以及最大的爬行动物,在各地的传说当中,湾鳄都是一种残暴的食人巨怪,湾鳄确实有大量的食人记录,但人们对于湾鳄的敬畏多于恐惧. 湾鳄现分布于马来群岛.澳洲北部 ...
- mysql分组查询选择数量最多的前十个_mysql 查询每一个分组前N条记录
mysql 查询每一个分组前N条记录html 假设存在表movie, 有字段 id, part(地区), mcount(观看次数)mysql 现查询每一个地区观看次数最多的3部movie, 则表sq ...
- mysql查询去重第一条_Mysql用法记录 - Ashley-OSCHINA的个人空间 - OSCHINA - 中文开源技术交流社区...
1.查询某个字段,在数据库不重复的条数(去重查询) select count(distinct item_uid) from supply_order; 查询 表 supply_order 中 ite ...
- mysql取分组最新的一条_mysql group by之后取每个分组最新的一条
最近遇到一个需求就是需要从mysql中根据id查出一组数据,该组数据有36个类型,每种类型每天都会插入一条新的数据,然后我要拿每个类型的最新一条出来. -- 首先我想的是,先按照类型分组,然后在按照时 ...
最新文章
- Go 语言web 框架 Gin 练习5
- 中国的四大沙地,你都认识吗?
- Springboot07配制数据统一返回格式以及定义统一的异常处理类
- HTML5学习笔记简明版(5):input的type超级类型
- 信号检测与估计理论pdf
- 图像效果的一些专业测试工具和指标:
- 制作 jvm 火焰图
- Scrapy-豆瓣电影Top250
- love2d ffi 窗口移动
- wps合并重复项并求和_wps中在同一张表格中怎么将相同项合并并求和
- 阳春三月,激情飞扬,c/c++0313就业班开班啦!
- MySQL小数数据类型
- itan:cookie-session简介
- 系统中负负得正的兼容逻辑也许暂时能跑起来, 但迟早会坑人!
- 彻底解决DNS劫持污染,如何彻底解决DNS劫持污染,方法介绍
- 在一起计时器_如何在纯JAVASCRIPT中构建倒数计时器
- Android内、外存储 易混淆点剖析(/mnt/sdcard、/storage/sdcard0、/storage/emulated/0等区别)
- 纯CSS实现正方形、自适应正方形方法
- 2023北京大学计算机考研信息汇总
- 光传感器类有哪些最新发表的毕业论文呢?
热门文章
- 网络存储(三)之ISCSI搭建的入门
- Foundation框架集合 ---- NSArray和NSMutableArray
- lucene 建索引
- U盘被写保护的解决办法
- failed to load kernel library!处理办法
- 整理了一个带语法高亮显示,及到处html功能的richtextbox控件
- python列表有哪些操作_python列表的基本操作有哪些
- excel甘特图模板_最简单的Excel甘特图制作方法,只用一条公式,项目进度一目了然...
- java struts2国际化代码下载_【Java框架】java struts2框架中页面表示国际化的方法 - 思诚科技...
- Python机器学习:梯度下降法005梯度下降法和数据标准化