pdomysql(mariadb)查询不区分大小写,尽管使用了默认排序规则

c9x0cxw0  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(617)

我有一个utf8名称的查询:

select column from table where name = 'something'

当我从mysql客户机(heidisql)尝试这个方法时,即使名称和其他东西之间有大小写差异,也会返回结果。这很好。
然而,当我用pdo从php运行相同的查询时,由于某些原因,查询是区分大小写的。
该表使用默认的排序规则utf8\u general\u ci,在pdo连接中,我只设置charset=utf8。
那么pdo连接的默认排序规则不应该也是不区分大小写的吗?

6jjcrrmo

6jjcrrmo1#

我从php打印了排序规则变量:

show variables where variable_name like '%coll%';

上面写着:

array(3) {
  [0]=>
  array(2) {
    ["Variable_name"]=>
    string(20) "collation_connection"
    ["Value"]=>
    string(15) "utf8_general_ci"
  }
  [1]=>
  array(2) {
    ["Variable_name"]=>
    string(18) "collation_database"
    ["Value"]=>
    string(15) "utf8_general_ci"
  }
  [2]=>
  array(2) {
    ["Variable_name"]=>
    string(16) "collation_server"
    ["Value"]=>
    string(15) "latin1_swedish_ci"
  }
}

当连接和数据库排序规则为utf8\u general\u ci时,我不确定为什么服务器排序规则latin1\u swedish\u ci会导致问题,但当我将服务器排序规则也更改为utf8\u general\u ci时:

set global collation_server = "utf8_general_ci";

然后查询也从php开始不敏感地处理case。

相关问题