在Mysql中编码有问题

时间:2011-05-07 01:57:23

标签: php mysql utf-8 character-encoding

我有下一张桌子:

CREATE TABLE IF NOT EXISTS `applications` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

我想在“名称”字段中存储值“España”。

我有一个PHP FILE(用UTF8编码),带有一个表单来保存它。当我使用php文件保存“España”并且我使用php从mysql读取时,我看到数据正常。

但如果转到PMA o Mysql查询浏览器,我会看到:“España”

如果我将它从PMA(编码设置为UTF-8)或mysql查询浏览器保存,我在这两个工具上看到了确定,但我从PHP看到了“Espa a”。

我不明白为什么。

以字节为单位:

如果从PHP保存,我会看到:C3 83 C2 B1(用于ñ)

如果从MQB或PMA保存,我会看到:C3 B1(用于ñ)

2 个答案:

答案 0 :(得分:0)

在开放连接上执行查询之前运行mysql_set_charset()

mysql_set_charset("UTF-8");

答案 1 :(得分:0)

问题是php mysql客户端。它使用latin1作为连接的编码,你可以看到:

echo mysql_client_encoding($con);

print_r(mysql_fetch_assoc(mysql_query("show variables like 'char%';")));

有两种方法可以解决这个问题:

mysql_set_charset("utf8");

mysql_query("SET CHARACTER SET 'UTF8'", $con); // data send by the server
mysql_query("SET NAMES 'UTF8'", $con); // data send by the client