为啥我必须使用 set_charset("utf8") 即使一切都是 utf-8 编码的? (MySQLi-PHP)

Posted

技术标签:

【中文标题】为啥我必须使用 set_charset("utf8") 即使一切都是 utf-8 编码的? (MySQLi-PHP)【英文标题】:Why do i have to use set_charset("utf8") even though everything is utf-8 encoded? (MySQLi-PHP)为什么我必须使用 set_charset("utf8") 即使一切都是 utf-8 编码的? (MySQLi-PHP) 【发布时间】:2011-04-04 01:25:43 【问题描述】:

我的表的排序规则是 utf8_general_ci。

我的页面使用 UTF-8 编码(没有 BOM)。

在我的页面中,我的 Equiv 元标记将字符集设置为 utf8

我的数据中有土耳其语字符。

当我输出它们时,它并没有按应有的方式显示它们,但是当我执行 $db->set_charset("utf8"); 时,它可以工作。

为什么我必须使用$db->set_charset("utf8");,即使所有内容都是 utf-8 编码的?

【问题讨论】:

与您的要求无关,但您是否在 HTTP 响应中设置了 Content-type 中的字符集? 我用这个:<meta http-equiv="Content-Type" content="text/html;charset=utf8" /> 是的,但您应该在 HTTP 标头中进行设置。 【参考方案1】:

datamysql 中存储为 UTF-8,但 php 的客户端连接排序规则不是。这就是为什么您必须在 PHP 中使用set_charset 进行数据库连接的原因。

更新

php.ini:default_charset utf-8.htaccess:AddDefaultCharset utf-8

【讨论】:

谢谢,但我可以通过 php.ini 或类似的方式更改它吗? 我查看了我的 mysql 服务器的变量,所有排序规则和编码都设置为 utf-8,所以我知道问题不在于 mysql 服务器。感谢您的更新:我在 PHP.net 页面 (php.net/manual/en/ini.core.php) 中检查了 php.ini 变量的定义,它与 header('Content-type:utf-8') 和 <meta content="charset=utf-8" /> 相同我还检查了这个: php.net/manual/en/ini.list.php 我找不到任何 mysql.default_charset 变量,所以我想我会使用那个“set_charset”函数。感谢您的回复,我很感激。 @Dada:我在the php.ini documentation的“数据处理”下找到了default_charset

以上是关于为啥我必须使用 set_charset("utf8") 即使一切都是 utf-8 编码的? (MySQLi-PHP)的主要内容,如果未能解决你的问题,请参考以下文章

为啥我必须显式调用我的库?

为啥quoted_identifier 必须打开才能使用过滤索引?

为啥我看到“TypeError:字符串索引必须是整数”?

为啥必须扩展一个对象才能删除它的成员?

为啥“npm install”告诉我“没有安装你必须自己安装对等依赖项:”?

为啥属性的属性必须是可读的?