2011-01-25 103 views
0

我在阿拉伯数据页表中有一列。奇怪的MySQL编码问题

如果我这样做...

@mysql_query("select title from pages where web_id = '$id'"); 

我得到正确的数据,在阿拉伯语。

但是,如果我再次调用相同的函数,实际上,它是在一个循环中,第二次它带给我垃圾数据。看起来像这样

"تنظيم الأوقا٠العامة اقرأ قطاع 

而且,如果该查询之前,我做任何这样:

@mysql_query("SET NAMES 'utf8'"); 
@mysql_set_charset('utf8'); 
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'"); 

我总是得到垃圾数据,甚至在第一个电话。这里发生了什么事?

注意,数据库,表和字段排序规则设置为utf8_bin

回答

1

一些随机提示:

尽量不要使用@操作。它会抑制任何错误消息。

您需要正确逃生输入参数:

mysql_query("SELECT title FROM pages WHERE web_id = '" . mysql_real_escape_string($id) . "'"); 

您需要检查的mysql_query()返回值:

$res = mysql_query("SELECT title FROM pages WHERE web_id = '" . mysql_real_escape_string($id) . "'"); 
if(!$res){ 
    die('Could not fetch page title'); // See mysql_error() for error message 
} 

确保你的PHP源代码保存为UTF-8。任何体面的编辑器都可以保存为UTF-8,并在状态栏中显示当前编码。

检查您的表格定义。 MySQL允许设置每个表和列的编码。

使用mysql_set_charset()设置连接编码。

确保浏览器将您的页面呈现为UTF-8。在PHP中,您可以生成相应的HTTP标头:

header('Content-Type: text/html; charset=utf-8'); 
+0

id已被转义。有一个返回值。 php代码被保存为utf-8。页面以utf-8编码显示。正如我已经提到的,我试过mysql_set_charset() – HyderA 2011-01-25 10:23:01

0

您应该确认你的领域是否真的包含UTF-8的数据。即使它设置为UTF-8,也可能导入了错误的数据或数据可能已损坏。你可以看一下具体的字节流使用:

SELECT hex(myfield) FROM mytable; 

如果您已导入数据,你应该注意的是,数据文件可能被解释为不同的编码是 - 事实上它甚至可能已经做到。你需要确保文件被正确识别,例如:

mysql --default-character-set=utf8 database < mydbbackup.sql