SQL查询+特殊字符ä,ö,ü,ø等

时间:2012-05-12 11:48:56

标签: mysql sql character-encoding collation

在过去的几天里,我正在解决一个问题,需要一些如何解决问题的技巧。

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

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


如果$ value不包含ä ü ö ø之类的字符,它可以正常工作
数据库的排序规则为utf8_general_ci

我尝试使用php conv()函数进行各种组合,但无法使其正常工作。

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

2 个答案:

答案 0 :(得分:1)

使用预准备语句,数据库驱动程序将为您完成所有操作,并且您不会受到SQL注入攻击作为奖励。

请参阅http://php.net/manual/fr/mysqli.prepare.php

答案 1 :(得分:0)

我想说试试utf8_unicode_ci整理

来自this链接:

主要区别是:

  1. utf8_unicode_ci支持所谓的扩展和连字,例如: 德语字母ß(U + 00DF LETTER SHARP S)在“ss”附近排序 LetterŒ(U + 0152 LATIN CAPITAL LIGATURE OE)在“OE”附近排序。
  2. utf8_general_ci不支持扩展/连字,它排序 所有这些字母都是单个字符,有时候是错误的顺序。

    1. utf8_unicode_ci 通常对所有脚本更准确。 例如,在西里尔文块上: utf8_unicode_ci适用于所有这些语言: 俄语,保加利亚语,白俄罗斯语,马其顿语,塞尔维亚语和乌克兰语。 虽然utf8_general_ci仅适用于俄罗斯和保加利亚语的西里尔语。 白俄罗斯语,马其顿语,塞尔维亚语和乌克兰语中使用的额外字母 排序不好。
    2. utf8_unicode_ci的缺点是它有一点点 比utf8_general_ci慢。

      所以当你需要更好的排序顺序时 - 使用utf8_unicode_ci, 当你对表演完全感兴趣时 - 使用utf8_general_ci。