哪个MySQL排序规则与PHP的字符串比较完全匹配?

时间:2016-07-06 15:52:50

标签: php mysql pdo character-encoding collation

这是一个MySQL查询:

SELECT last_name FROM users ORDER BY last_name

我们将所有数据都存入PHP,然后运行:

$prior = NULL;
do {
    $current = array_shift($results);
    assert($current >= $prior);
    $prior = $current;
} while ($current !== NULL);

目前,这种断言对某些输入无效。是否可以在上面的MySQL查询中添加一个COLLATE子句来绝对保证PHP断言?

我试过的东西:

  • 以上代码,它不适用于某些非ASCII输入
  • ORDER BY email COLLATE utf8_bin导致COLLATION 'utf8_bin' is not valid for CHARACTER SET 'latin1'
  • 也许这是What is the best collation to use for MySQL with PHP?的重复但似乎更主观,我正在寻找特定问题的具体答案

其他人注意到:

1 个答案:

答案 0 :(得分:1)

echo ('a' == 'A') ? 'a==A ' : 'a <> A ';
echo ('a' == 'á') ? 'a==á ' : 'a <> á ';

两者都回来<>,所以我推断PHP的行为类似于latin1_bin(或者你所拥有的任何字符集的_bin)。