0

在过去的几天里,我一直在思考一个问题,需要一些关于如何解决问题的提示。

我有一个看起来像这样的 sql 查询

    mysql_real_escape_string($value);
    $sql_first = "SELECT `user_id` FROM `usermeta` WHERE `meta_value` = '".$value."'


如果 $value 不包含像ä ü ö ø

数据库的排序规则这样的字符,它工作正常utf8_general_ci

我尝试了 phpconv()函数的各种组合,但无法使其正常工作。

我想我必须转换$value为 UTF-8 - 这是朝着正确的方向发展吗?

4

2 回答 2

1

使用准备好的语句,数据库驱动程序会为你做所有事情,而且你不会受到 SQL 注入攻击作为奖励。

http://php.net/manual/fr/mysqli.prepare.php

于 2012-05-12T11:53:16.183 回答
0

我会说尝试utf8_unicode_ci 排序规则

这个链接:

主要区别在于:

  1. utf8_unicode_ci 支持所谓的扩展和连字,例如:德语字母 ß (U+00DF LETTER SHARP S) 在“ss”附近排序 字母 Œ (U+0152 LATIN CAPITAL LIGATURE OE) 在“OE”附近排序。

utf8_general_ci 不支持扩展/连字,它将所有这些字母排序为单个字符,有时顺序错误。

  1. utf8_unicode_ci通常对所有脚本都更准确。例如,在西里尔字母块上:utf8_unicode_ci 适用于所有以下语言:俄语、保加利亚语、白俄罗斯语、马其顿语、塞尔维亚语和乌克兰语。虽然 utf8_general_ci 仅适用于西里尔文的俄语和保加利亚语子集。白俄罗斯语、马其顿语、塞尔维亚语和乌克兰语中使用的额外字母排序不佳。

utf8_unicode_ci 的缺点是比 utf8_general_ci 慢一点。

因此,当您需要更好的排序顺序时 - 使用 utf8_unicode_ci,而当您对性能完全感兴趣时 - 使用 utf8_general_ci。

于 2012-05-12T11:56:33.850 回答