- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 Linux 服务器上使用 MySQL 数据库开发网站。
使用 phpMyAdmin,在数据库上,它说
但是,我已经使用 InnoDB 和 utf8_unicode_ci 创建了所有表。我还检查了所有表的表字段是否为 utf8_unicode_ci。
然而,当我使用 mysql_fetch_array 并回显到流时,它给出了乱码。我必须显式设置 mysql_set_charset('utf8')
以使文本正确显示。
PHP版本为5.3.9; MySQL 版本为 5.1.70-cll - MySQL Community Server (GPL)。
这是我第一次遇到这个问题,之前我从来没有设置过字符集。
是什么导致 php mysql_* 获取的文本乱码?什么情况下需要mysql_set_charset
?
编辑:这不是吸引建议使用替代库的问题,例如mysqli,pdo。我只想了解有关 MySQL 和字符集行为的当前情况。谢谢。
最佳答案
当在两个系统之间交换数据时,总会有一个问题“发送文本的编码是什么?”“文本”简单地表示为二进制数据,即由 1 和 0 组成的长串。这些可能意味着任何事情。有数百种编码方案可以将不同的字符编码为不同的 1 和 0 序列。如果系统只是接收到一串字符串而没有被告知它们代表什么编码,则系统无法知道这些字符应该是什么。
因此,对于两个系统之间的任何接口(interface),都需要指定编码字符串所在的规范。对于 MySQL,这就是 API 调用 mysql_set_charset
。这是告诉 MySQL PHP 发送给它的编码字符串是什么,以及 MySQL 应该将什么编码的字符串返回给 PHP 的方法。如果不明确设置此设置,则假设某些默认编码,这可能与您期望的编码不同,从而产生不匹配和垃圾字符。
阅读What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text和 Handling Unicode Front To Back In A Web App获取更多信息。
关于php - 什么时候需要显式调用mysql_set_charset?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18184408/
我有一个 PHP 网络应用程序,其中包含采用 utf8 文本的 MySQL 表。我最近将数据从 latin1 转换为 utf8 以及相应的表和列。然而,我确实忘记了使用 mysql_set_chars
我将所有 mysql 表转换为 utf-8_unicode 并开始使用 mysql_set_charset('utf8'); 函数。 但在此之后,一些字符如 Ş、Ö 开始看起来像 Ö、Åž 如何将
我是一名优秀的程序员,十分优秀!