我在页面表中有一个包含阿拉伯数据的列。
如果我这样做......
@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
答案 0 :(得分: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');
答案 1 :(得分:0)
您应该验证您的字段是否实际包含UTF-8数据。即使将其设置为UTF-8,您也可能导入数据不正确或数据可能已损坏。您可以使用以下命令查看特定的字节流:
SELECT hex(myfield) FROM mytable;
如果您已导入数据,则应注意数据文件可能已被解释为采用不同的编码 - 实际上甚至可能已经这样做了。您需要确保正确识别文件,例如:
mysql --default-character-set=utf8 database < mydbbackup.sql