php mysql SET NAMES'utf8'COLLATE'utf8_unicode_ci'不适用于mysqli

时间:2012-11-17 18:58:12

标签: php mysqli

我正在从php mysql_ *方法将我的网站迁移到php mysqli。

我有以下代码完成了这项工作:

  

mysql_query(" SET NAMES' utf8' COLLATE' utf8_unicode_ci'");

如果没有此查询,我的字符串字符(格鲁吉亚语)就会带有问号。 比如它写的是?????????而不是გამარჯობა

所以既然它完成了它的工作我很高兴,但现在我不能用mysqli做同样的事。

$mysqli = new mysqli("localhost", "root", "", "test");
$mysqli->query("SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'");

任何人都可以帮帮我吗?感谢。

5 个答案:

答案 0 :(得分:16)

建议不要使用mysqli查询来设置名称,而是mysqli::set_charset

$mysqli = new mysqli("localhost", "root", "", "test");
$mysqli->set_charset("utf8");

答案 1 :(得分:1)

您可以使用 mysqli_set_charset

  

这是更改charset的首选方法。使用mysqli_query()   不推荐设置它(例如SET NAMES utf8)。

但是,要设置排序规则,您仍然必须使用SET NAMES查询。

答案 2 :(得分:1)

http://php.net/manual/en/mysqli.set-charset.php

mysqli->set_charset("utf8")

答案 3 :(得分:1)

提交了PHP功能请求/错误报告......

请参阅获得uw@php.net回复的https://bugs.php.net/bug.php?id=52267

  

...使用mysqli_set_charset()设置字符集,然后SET NAMES更改排序规则。

他/她也链接到http://dev.mysql.com/doc/refman/5.1/en/mysql-set-character-set.html

  

此函数用于设置当前连接的默认字符集。字符串csname指定有效的字符集名称。连接排序规则成为字符集的默认排序规则。此函数与SET NAMES语句类似,但也设置mysql->charset的值,从而影响mysql_real_escape_string()使用的字符集

我将链接到http://dev.mysql.com/doc/refman/5.6/en/charset-collate.html,其中显示了如何使用查询的任何排序规则进行查询。

  

使用COLLATE子句,您可以覆盖默认排序规则以进行比较。 COLLATE可用于SQL语句的各个部分。以下是一些例子:

  •   

    ORDER BY
      SELECT k FROM t1 ORDER BY k COLLATE latin1_german2_ci;

  •   

    AS
      SELECT k COLLATE latin1_german2_ci AS k1 FROM t1 ORDER BY k1;

  •   

    GROUP BY
      SELECT k FROM t1 GROUP BY k COLLATE latin1_german2_ci;

  •   

    具有聚合功能:
      SELECT MAX(k COLLATE latin1_german2_ci) FROM t1;

  •   

    DISTINCT
      SELECT DISTINCT k COLLATE latin1_german2_ci FROM t1;

  •   

    WHERE
      SELECT * FROM t1 WHERE _latin1 'Müller' COLLATE latin1_german2_ci = k; SELECT * FROM t1 WHERE k LIKE _latin1 'Müller' COLLATE latin1_german2_ci;

  •   

    HAVING
      SELECT k FROM t1 GROUP BY k HAVING k = _latin1 'Müller' COLLATE latin1_german2_ci;

答案 4 :(得分:-3)

$con=mysqli_connect("localhost","admin","1234","web");
$con->set_charset("utf8");