我在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:
DEV3:
操作系统和MySQL的分发信息是:
产品:
DEV:
在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环境相同。
谁能想到为什么会这样?