代码之家  ›  专栏  ›  技术社区  ›  Tom

虽然使用了默认排序规则,但UTF8列的PDO MySQL(MariaDB)查询不区分大小写

  •  0
  • Tom  · 技术社区  · 8 年前

    select column from table where name = 'something'
    

    当我在mysql客户机(HeidiSQL)中尝试此方法时,即使name和something之间存在大小写差异,也会返回结果。这很好。

    然而,当我使用PDO从PHP运行相同的查询时,由于某种原因,查询是区分大小写的。

    该表使用默认的排序规则utf8_general_ci,在PDO连接中,我只设置charset=utf8。

    那么PDO连接的默认排序规则不应该也是不区分大小写的吗?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Tom    8 年前

    我从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_general_ci时,服务器排序规则latin1_瑞典语_ci会导致问题,但当我将服务器排序规则也更改为utf8_general_ci时:

    set global collation_server = "utf8_general_ci";
    

    然后查询也从PHP无意识地开始工作case。