【发布时间】:2011-09-15 21:22:40
【问题描述】:
我有一个包含文件名和一些其他信息的表格。当我运行以下查询时:
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 的查询都可以正常工作。如果模式不包含反斜杠,则正则表达式查询有效。如果它包含反斜杠,它可以工作,但从表返回的数据缺少它的反斜杠。即使查询找到正确的记录。感谢橡树
是问题所在:character_set_results 正则表达式查询是否默认返回不同的字符集结果然后是 = 查询?
我尝试了以下方法来更改字符集以查看发生了什么:
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'`上得到了什么?
-
它正确返回文件名中的反斜杠。