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)
整理与存储无关.您需要设置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
.不完全确定.
可能更容易使用数据库,正如其他人已经建议的那样.