我有一个包含文件名和其他信息的表。当我运行以下查询:php mysql results backslashes removed
select * from `documentinfo` WHERE `num`='40217'
我得到的结果正确:
Array
(
[num] => 40217
[datetime] => 2011-09-15 15:22:07
[date] => 2011-09-15
[filename] => C:\redoak\DocumentsIN\Filer\8883894460_3044564210_07334802020001.mp3
)
当我运行查询:
QUERY:`filename` REGEXP '^C:\\redoak\\DocumentsIN\\Filer'
我得到:
Array
(
[num] => 35910
[datetime] => 2010-12-03 17:34:38
[date] => 2010-12-03
[filename] => c:
edoakDocumentsINFiler8883894460_3043926485_05863748580001.mp3
)
注意结果已经从\中删除文件夹名称。
我用下面的PHP既显示此:
while ($row = array_change_key_case(mysql_fetch_assoc($webquery), CASE_LOWER))
{
print_r($row);
}
查询任何NUM工作得很好。如果模式不包含反斜杠,则正则表达式查询将起作用。如果它包含一个反斜杠,它会起作用,但从表中返回的数据缺少反斜杠。即使查询找到正确的记录。感谢Oak
问题:character_set_results 默认情况下,正则表达式查询是否返回不同的字符集结果,然后a = query?
我尝试了以下更改字符集,看看发生了什么:
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'") or die("ERROR SETTING CHAR SET");
echo '<pre>debug: encoding=', mysql_client_encoding(), '</pre>';
$webquery=mysql_query($query);
echo '<pre>debug: encoding=', mysql_client_encoding(), '</pre>';
它总是表示LATIN1
我用mysql_set_charset('utf8');
并将其更改为utf8
,但结果并没有改变。
而你在'select * from documentinfo WHERE num ='35910''上得到了什么? –
它会正确返回文件名中的反斜杠。 –