2010-08-25 95 views
3

我有一个填充了非英文数据的MySQL数据库表。当我在Navicat MySQL浏览器中查看数据时,数据显示正常。然而,当我运行php脚本来选择并显示网页上的数据时,它会显示问号。页面编码设置为utf8,甚至MySQL的排序规则设置为utf8 - 在选择和显示时出现错误...请帮助。非英文字符在我的php页面上显示为问号 - 在数据库中显示正常

+2

你能提供一个链接到页面吗?或者一些代码? – Chris 2010-08-25 15:38:30

回答

5

MySQL连接设置可能在这里出错。当你从PHP连接数据库运行此MySQL命令,在运行任何其他SQL命令之前:

SET names 'utf8'; 

这应该连接的编码设置为UTF-8。正如你所说,页面和数据库已经是UTF-8(这也应该表示页面发送Content-Type: text/html; charset=utf-8);连接本身可以有不期而遇默认:(

+0

非常感谢你:D,它确实是它的魅力! – Ali 2010-08-25 15:50:01

+0

Ali,那么你应该选择这个答案。 – 2010-08-25 15:51:39

+0

@Ali:不客气。这是MySQL的一个鲜为人知的功能。 – Piskvor 2010-08-25 16:03:55

3

另外一个不同的编码,在HTML,里面我们必须写:

<meta charset="utf-8"> 

当我们创建一个MySQL数据库,我们必须用这样的:

CREATE DATABASE `base` DEFAULT CHARACTER SET=utf8; 

当我们创建表,使用:

CREATE TABLE `base`.`table` (
`key` int(5) unsigned NOT NULL, 
`name` varchar(100), 
... 
PRIMARY KEY (`key`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

在PHP代码,在mysql_connect()和mysql_select_db()之后,使用:

mysql_query('SET NAMES UTF8'); 
+0

在第一部分中,我假设你的意思是“除了Content-Type之外,该文档还必须有一个字符集”;这可以在标题中发送(如Content-Type:text/html; charset = utf-8),也可以在HTML HEAD中发送(如')。您的语法是HTML 5,但尚未普遍支持。另外,创建表格时,最好将排序规则与字符集一起设置(字符集确定支持的字符,排序规则确定该字符集内的排序顺序 - 例如“...rŕřsštt...”)否则,就是好帖子。 – Piskvor 2010-08-25 20:32:03

相关问题