我将varchar存储在utf8 mysql表中,并使用utf8_general_ci排序规则。我在varchar上有一个唯一的索引。我想用php做一个字符串比较,它相当于mysql对索引所做的操作。
一个具体的例子是,我希望能够在发生这种情况之前检测到“a”在php中被视为等同于“_”:
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
最佳答案
排序规则与存储无关。您需要设置字符集来确定存储编码。排序规则控制比较和排序的方式。排序规则必须能够识别字符集,否则与字符集无关。
要回答您的问题,您可以使用iconv
来翻译文本,然后进行比较。例如:
function compare($s1, $s2) {
return strcmp(
iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $s1),
iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $s2));
}
这基本上就是mysql将为您做的,尽管它可能比
ISO-8859-1//TRANSLIT
更快,并且它可能有一个稍微不同的排序表。不完全确定。不过,正如其他人已经建议的那样,使用数据库可能会更容易。