![](/img/trans.png)
[英]String Comparison using PHP mysql_* SET NAMES UTF 8 and Mysql Table With utf8_unicode_ci
[英]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")
请参阅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-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;
$con=mysqli_connect("localhost","admin","1234","web");
$con->set_charset("utf8");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.