表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.02sec)

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.05sec)

表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.65sec)

囧了,竟然遇到上面的情况。。。。。。

但是通过查看对应的编码,是不同的:

mysql> select hex('a')->;+----------+

| hex('a') |

+----------+

| 61 |

+----------+

1 row in set (0.01sec)

mysql> select hex('à');+-----------+

| hex('à') |

+-----------+

| C3A0 |

+-----------+

1 row in set (0.01sec)

接下来怀疑的是,表结构是否相同?

表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.07sec)

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.34sec)

完美解决问题。。。

但是为什么呢?

原来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

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

  1. mysql+date+范围+性能_MySQL性能优化的最佳20+条经验

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据 ...

  2. mysql 性能 比较好_MySQL性能优化的最佳20+条经验

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...

  3. mysql+性能+计算列_MYSQL性能优化的最佳20+条经验

    当你查询表的有些时候,你已经知道结果只会有一条结果,但因为你可能需要去fetch游标,或是你也许会去检查返回的记录数. 在这种情况下,加上 LIMIT 1 可以增加性能.这样一样,MySQL数据库引擎 ...

  4. Mysql通过一个限制条件,查出多条不同的记录

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

  5. mysql 包含非数字_mysql 正则表达式查询含有非数字和字符的记录

    比如我们有一张school表,里面有一个字段county_name,现在我们要查询county_name字段中包含a-w字母和数字以外字符的记录,那么sql该如何写呢?请看下面的写法: select ...

  6. mysql创建用户变量_MySQL创建一个变量的用户?

    您可以为此使用动态查询.首先为用户名设置变量名,为密码设置变量名.语法如下-SET @anyVariableName='yourUserName'; SET @anyVariableName1='yo ...

  7. php mysql 删除重复数据_mysql删除重复数据保留一条

    1.查找重复数据:SELECT * FROM `table_a` as a WHERE NOT EXISTS (SELECT * FROM table_b as b WHERE b.a_id=a.id ...

  8. mysql查询数量语句_mysql语句统计总数_一条sql语句实现统计查询_MySQL

    bitsCN.com 一条sql语句实现统计查询 如图:程序员在进行如下的统计时,现在提供两种实现方案: 方案一:运用 SEKECT CASE WHEN EXPLAIN SELECT count(*) ...

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

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

最新文章

  1. 太好玩了,爬虫、部署API、加小程序,一条龙玩转知乎热榜!
  2. datasnap發布
  3. tfidf处理代码_tfidf.txt
  4. matlab中quat2angle,RPY_Euler_Quaternion_AngleAxis角度转化:Matlab、Python、Halc
  5. wamp怎么安装mysql服务器_用wamp的mysq安装pythonmysql
  6. 20170923在线编程之输入年、月、日输出这是一年的第几天
  7. 平方方程应该都有整数解
  8. Java中字符串的全部知识_java基础教程之字符串的介绍,比较重要的一个知识点「中」...
  9. 四叶草引导程序 CloverBootloader 5125中文版
  10. 计算机网络职业生涯规划1000字,计算机职业生涯规划1000字
  11. exchange虚拟服务器,exchange服务器之为Exchange服务重建IIS虚拟目录
  12. Peewee fn 用法
  13. ann flann alglibB最近邻方法时效性探索
  14. partitionBy()的解释
  15. flowable 会签和或签的实现 任务多实例
  16. 企业辛迪加:德鲁克日志之五月十八日
  17. 【Shiro】6、Shiro实现限制密码错误次数从而限制用户登录
  18. [CF3B]Lorry
  19. yolact训练自定义数据集并转onnx
  20. 大数据Hive学习案例(1)——基于搜狗sogou_500w的日志数据分析

热门文章

  1. CanvasRenderingContext2D.imageSmoothingEnabled
  2. RocketMQ3.2.6安装部署及调用
  3. Mvc6 错误Microsoft.AspNet.Http.Features.IRequestIdentifierFeature
  4. weblogic8.1在myeclipse中启动正常,在单独的weblogic中无法正常启动的解决方案.
  5. MapReduce的map流程
  6. [转载] 快速入门(完整):Python实例100个(基于最新Python3.7版本)
  7. [转载] python之flask框架
  8. [转载] HTML所有标签及其属性汇总
  9. UCML 参与者关键 与依赖关联外键
  10. RS-485总线和Modbus通信协议的关系