我有下一张桌子:
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(用于ñ)
答案 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