为啥我必须使用 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】:
data 在 mysql 中存储为 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 必须打开才能使用过滤索引?