1

我有一个 MySQL 数据库,其中包含各种语言的单词,因此我将表列设置为“utf8_unicode_ci”。UTF-8 可以包含所有可能的字符,并且 unicode_ci 也具有正确的排序(并且性能较低)。当我在 phpMyAdmin 中浏览表格时,所有特殊字符看起来都不错。问题是当我 SQL SELECT 一堆名称并将它们显示在我的网站上时,字符无法显示/编码不正确(看起来像 Chrome 中的问号,资源管理器中的正方形等)。我为我的网站设置了正确的编码: <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">如果我将它们粘贴到我的页面上,我还可以显示各种字符。该问题仅在从数据库中检索它们时出现。php mysqli_query() 是否更改了编码或 SELECT 查询是否以某种方式搞砸了?

4

3 回答 3

2

虽然@user4035的意图是对的,但无论是执行还是推理都是错误的。

  1. 不要无条件地将任何错误直接输出到浏览器中。程序员不会看到它,而用户与它无关。
  2. 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");
于 2013-09-09T15:20:53.623 回答
0

Try:

mysql_query("SET NAMES 'utf8'", $con);

before

mysql_select_db("asdasd", $con);
于 2013-09-09T15:07:51.283 回答
0

SET NAMES 'UTF8'连接 MySQL 后尝试使用:

$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);
}

正如手册所说:

SET NAMES 指示客户端将使用什么字符集将 SQL 语句发送到服务器...它还指定服务器应该使用的字符集将结果发送回客户端。

于 2013-09-09T15:09:01.700 回答