用PHP比较PHP中的字符串

twk*_*twk 6 php mysql collation utf-8 mysql-error-1062

我将varchar存储在utf8 MySQL表中并使用utf8_general_ci排序规则.我在varchar上有一个唯一的索引.我想在PHP中进行字符串比较,这与MySQL在索引上的操作相同.

一个具体的例子是,在发生这种情况之前,我希望能够在PHP中检测到'a'被认为等同于'À':

mysql> insert UniTest (str) values ('a');                                   
Query OK, 1 row affected (0.00 sec)

mysql> insert UniTest (str) values ('À');                                   
ERROR 1062 (23000): Duplicate entry 'À' for key 1
Run Code Online (Sandbox Code Playgroud)

tro*_*skn 9

整理与存储无关.您需要设置charset以确定存储编码.整理控制着如何进行比较和排序.整理必须是charset意识,否则它与charset无关.

要回答您的问题,您可以使用iconv转换文本,然后进行比较.例如:

function compare($s1, $s2) {
  return strcmp(
    iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $s1),
    iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $s2));
}
Run Code Online (Sandbox Code Playgroud)

这基本上就是MySql会为你做的事情,虽然它可能更快,并且可能有一个稍微不同的校对表ISO-8859-1//TRANSLIT.不完全确定.

可能更容易使用数据库,正如其他人已经建议的那样.