在where子句中使用CONCAT_WS时区分大小写问题,在数据库环境之间不一致

时间:2019-06-25 23:06:03

标签: mysql

我在MySQL中遇到了一些固定的区分大小写的问题,我希望有人能够提供一些见识。

以下是查询:

select distinct node.title
from node, field_data_field_people_position, field_data_field_section
where node.nid = 10553
and node.nid = field_data_field_people_position.entity_id
and node.nid = field_data_field_section.entity_id
and CONCAT_WS(' ', node.title, ' ', field_data_field_people_position.field_people_position_value, ' ', field_data_field_section.field_section_tid) like '%STEVE%';

我正在PROD和三个DEV环境中进行测试。这是每个数据库的字符集和排序规则信息:

产品:

  • utf8

  • utf8_general_ci

DEV1和DEV2:

  • utf8
  • utf8_general_ci

DEV3:

  • latin1
  • latin1_swedish_ci

操作系统和MySQL的分发信息是:

产品:

  • 科学版Linux 6.9(Carbon)
  • mysql red 14.14 Distrib 5.1.73,用于使用readline 5.1的redhat-linux-gnu(x86_64)

DEV:

  • Ubuntu 18.04
  • 适用于Linux(x86_64)的MySQL版本14.14 Distrib 5.7.26,使用EditLine包装器

在PROD中,如果我们搜索“ STEVE”,则表示搜索区分大小写。

在所有DEV环境中,如果我们搜索“ STEVE”,则搜索不区分大小写。

基于对MySQL文档的阅读,我认为问题出在CONCAT_WS函数上,因为传递给它的参数之一_field_data_field_section.field_section_tid是一个整数字段。

如果我从PROD中的CONCAT_WS中删除_field_data_field_section.field_section_tid参数,则PROD中的查询结果与所有三个DEV数据库中的结果相同。

我不明白的是为什么DEV1和DEV2具有与PROD数据库相同的字符集和排序规则,并且它们返回预期的结果,但是PROD没有。

同样,如果我删除了CONCAT_WS的最后一个参数(整数字段field_data_field_section.field_section_tid),则PROD中的结果是正确的,与所有三个DEV环境相同。

谁能想到为什么会这样?

0 个答案:

没有答案