PHP MySQL编码错误?

时间:2009-05-07 18:56:10

标签: php mysql encoding utf-8

继承我的问题。我有一个名为quotes的mysql表。在其中一行中,引号包含folloqing字符

‘ and ’

现在行整理是 utf8__unicode__ci

当使用MySQL Query Browser和PHPMyAdmin来检索行时,引号按预期出现。然而,当我使用PHP从数据库中检索它们并将它们显示在屏幕上时,它们就像盒子一样出现了

� and �

我的html页面有UTF-8编码,所有UTF-8编码选项都在php中设置:

/* Set UTF-8 settings */
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');
mb_http_output('UTF-8');

/* Set ICONV ini settings */
ini_set('iconv.input_encoding', 'UTF-8');
ini_set('iconv.output_encoding', 'UTF-8');
ini_set('iconv.internal_encoding', 'UTF-8');

/* Set ICONV function settings */
iconv_set_encoding('input_encoding', 'UTF-8');
iconv_set_encoding('output_encoding', 'UTF-8');
iconv_set_encoding('internal_encoding', 'UTF-8');

在我看来它应该有效。但它没有:S可以让任何人对此有所了解。

3 个答案:

答案 0 :(得分:5)

您可能需要将UTF-8设置为MySQL连接上选择的字符集。如果您使用的是mysqli PHP驱动程序,则意味着这样:

$mysqli = new mysqli("localhost", "my_user", "my_password", "test");
$mysqli->set_charset("utf8");

答案 1 :(得分:4)

@Joakim,非常感谢你让我朝着正确的方向前进。我无法使用您的确切代码,因为即时通讯使用自定义数据库驱动程序,它使用旧的mysql命令而不是mysqli类。我尝试使用mysql_set_charset()但我的php版本不支持它(仍然是php 5 tho)。

这是我使用的解决方案:

mysql_query("SET CHARACTER SET utf8", $this->connection);
mysql_query("SET NAMES utf8", $this->connection);

答案 2 :(得分:1)

你的整理对你没有帮助;它只是确定排序顺序。您需要将默认字符集设置为utf-8,如:

CREATE TABLE `foo` (
    `id` int not null auto_increment,
    `name` varchar(50)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

您应该可以通过以下方式解决此问题:

ALTER TABLE `foo` DEFAULT CHARSET=utf8

如果他们在utf-8中,有时你的索引太长了。