我将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
troelskn.. 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)); }
这基本上就是MySql会为你做的事情,虽然它可能更快,并且可能有一个稍微不同的校对表ISO-8859-1//TRANSLIT
.不完全确定.
可能更容易使用数据库,正如其他人已经建议的那样.
整理与存储无关.您需要设置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)); }
这基本上就是MySql会为你做的事情,虽然它可能更快,并且可能有一个稍微不同的校对表ISO-8859-1//TRANSLIT
.不完全确定.
可能更容易使用数据库,正如其他人已经建议的那样.