我有一个包含文件名和其他信息的表。当我运行以下查询时:
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的工作就好了。如果模式不包含反斜杠,则regexp查询有效。如果它包含反斜杠它可以工作,但从表返回的数据缺少它的反斜杠。即使查询找到了正确的记录。感谢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
,但结果没有变化。
答案 0 :(得分:2)
MySQL将反斜杠字符解释为转义字符。对于查询中的反斜杠,请使用双反斜杠\\