我有一个MySQL数据库,包括各种语言的单词,因此我将表列设置为“utf8_unicode_ci”。 UTF-8可以包含所有可能的字符,unicode_ci也具有正确的排序(和较低的性能)。当我在phpMyAdmin中浏览表时,所有特殊字符看起来都正常。问题是当我在SQL上选择一堆名称并在我的网站上显示它们时,字符无法显示/没有正确编码(看起来像Chrome中的问号,资源管理器中的方块等)。我的网站编码正确:
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
如果我将它们粘贴到我的页面上,我也可以显示各种字符。只有在从数据库中检索问题时才会出现此问题。 php mysqli_query()是否会更改编码,或者SELECT查询是否会以某种方式搞乱它?
答案 0 :(得分:2)
尽管@ user4035的意图是正确的,但实施和推理都是错误的。
SET NAMES 'UTF8'
不等于set_charset()
函数。前者是一个特殊的SQL查询,不应该用于后一个函数。更好的版本如下。
您必须使用set_charset()
方法设置连接字符集:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$con=mysqli_connect("host", "user", "pw", "db");
$con->set_charset("utf8");
答案 1 :(得分:0)
尝试:
mysql_query("SET NAMES 'utf8'", $con);
前
mysql_select_db("asdasd", $con);
答案 2 :(得分:0)
连接到MySQL后尝试使用SET NAMES 'UTF8'
:
$con=mysqli_connect("host", "user", "pw", "db");
if (!$con)
{
die('Failed to connect to mySQL: ' .mysqli_connect_errno());
}
/* change character set to utf8 */
if (!$con->set_charset("utf8")) {
printf("Error loading character set utf8: %s\n", $con->error);
}
正如manual所说:
SET NAMES表示客户端将用于发送SQL的字符集 语句到服务器...它还指定服务器应该的字符集 用于将结果发送回客户端。