繁体   English   中英

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

[英]php mysql SET NAMES 'utf8' COLLATE 'utf8_unicode_ci' doesn't work with 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'");

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

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

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

你可以使用mysqli_set_charset

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

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

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

要么

mysqli->set_charset("utf8")

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

请参阅https://bugs.php.net/bug.php?id=52267 ,其中收到了来自uw@php.net的回复:

...使用mysqli_set_charset()设置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-collat​​e.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;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM