当我选择一个选项时,我有多选列表在dbase
中进行搜索的代码我有这个错误:
非法混合排序(utf8_general_ci,IMPLICIT)和 (utf32_general_ci,IMPLICIT)用于操作'UNION'
问题出在哪里?
这是我的代码:
<?php
$expertsearch = trim($_GET['nm']);
include("connect.php");
mysql_query("SET NAMES utf8");
$expertdata = mysql_fetch_object(mysql_query("SELECT * FROM experts WHERE ID = $expertsearch"));
$expertname = $expertdata->expert_name;
$sql = "SELECT * FROM eridb WHERE
eridb.expert1 = $expertsearch OR eridb.expert2 = $expertsearch OR eridb.expert3 = $expertsearch UNION
SELECT * FROM kacaredb WHERE
kacaredb.expert1 = $expertsearch OR kacaredb.expert2 = $expertsearch OR kacaredb.expert3 = $expertsearch UNION
SELECT * FROM mwedb WHERE
mwedb.expert1 = $expertsearch OR mwedb.expert2 = $expertsearch OR mwedb.expert3 = $expertsearch UNION
SELECT * FROM secdb WHERE
secdb.expert1 = $expertsearch OR secdb.expert2 = $expertsearch OR secdb.expert3 = $expertsearch UNION
SELECT * FROM seecdb WHERE
seecdb.expert1 = $expertsearch OR seecdb.expert2 = $expertsearch OR seecdb.expert3 = $expertsearch ";
$res = mysql_query($sql);
echo "<table border='1'>
$count = 0;
while($row=mysql_fetch_object($res))
{
$count = $count+1;
echo "<tr>";
echo "<td>" . $count . "</td>";
echo "<td>" . $row->id . "</td>";
echo "<td>" . $row->nameofresearch . "</td>";
echo "<td>" . $row->dateofstart . "</td>";
echo "<td>" . $row->dateofend . "</td>";
echo "<td>" . $row->budget . "</td>";
echo "<td>" . $row->requestedby . "</td>";
echo "<td>" . $row->projectstatus . "</td>";
echo "<td>" . $expertname . "</td>";
echo "<td>" . $row->projectstatus . "</td>";
echo "</tr>";
}
if($res){
echo "Successful";
echo "<BR>";
}
else {
echo "ERROR";
echo "<br>";
echo mysql_error();
echo "<a href='main1.php'><br>Please try again </a>";
}
echo "</table>";
?>
答案 0 :(得分:1)
有些列不同的charset / collation无法一起选择,utf8和utf32在你的情况下。在表中查找这些列(运行SHOW CREATE TABLE语句)并尝试使用CONVERT函数强制转换它们,例如: -
SELECT CONVERT(column_name USING utf8) FROM experts
UNION
SELECT CONVERT(column_name USING utf8) FROM eridb
答案 1 :(得分:1)
它的基本问题也有一个简单的解决方案。
只需使两列字符类型相同即可。
(utf8_general_ci,IMPLICIT)和(utf32_general_ci,IMPLICIT)显示您正在尝试将utf8_general_ci与utf32_general_ci匹配..
所以只需改变列的字符类型即可。