我正在尝试在mysql中执行此concat查询
SELECT CONCAT(if(fName,fName,''),Name)
From Student
错误:
#1271 - 操作'concat'的非法混合排序
答案 0 :(得分:19)
您在连接中使用的字符集和/或排序规则与表格中的字符集/排序规则不匹配。
有4种解决方案:
1-更改连接中的字符集:
//find out the charset used in your table.
SHOW TABLES LIKE 'student'
//set the server charset to match
SET NAMES 'charset_name' [COLLATE 'collation_name']
2-更改表中使用的字符集以匹配服务器字符集:
//find out the charset used in the server
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
//Change the charset used in the table
ALTER TABLE student ......
3-更改默认字符集设置并重新启动MySQL
编辑My.ini并替换character_set_*
选项,以便它们与您的表匹配。
4-更改连接的字符集设置
您的客户端可以覆盖字符集和整理设置 如果它不是选项1或3应该解决您的问题,但如果连接覆盖这些设置,您需要检查连接字符串并编辑charset / collation设置以匹配您的数据库。
一些建议:
找一个字符集。我建议UTF8
和整理:我建议utf8_general_ci
。并且无处不在地使用它们。
答案 1 :(得分:7)
这是由于集合的不同,您可以通过转换两个字符串或列来解决 一个集合说 UTF8
CONCAT(CAST(fName AS CHAR CHARACTER SET utf8),CAST('' AS CHAR CHARACTER SET utf8))
这将解决:)
您可以在MySQL Casting
查看有关在MySQL中投射的更多信息答案 2 :(得分:2)
看起来你在if
语句中没有使用,因为它会产生undefined
数据类型,因此concat
操作会因数据类型不同而失败。请尝试使用ifnull
来更改查询。
请尝试此查询:
SELECT concat(ifnull(fName,''),Name) From Student
在此处查看演示http://www.sqlize.com/kfy85j8f1e
另一个参考文献也是http://forums.mysql.com/read.php?10,225982,225982#msg-225982
答案 3 :(得分:2)
连接只能在所有使用的值的排序规则匹配时才能使用或者您使用排序规则,所有排序规则都是(从逻辑角度来看)的子集。
如果要连接文本,则每个文本应该是相同的排序规则。查看数据库使用的排序规则,然后查看连接使用的排序规则:
show variables like '%coll%'
collation_connection应该与您尝试连接的表的排序规则匹配。如果没有,则会出现错误消息。
然后,您可以更改连接排序规则以匹配表格中的连接排序规则。
答案 4 :(得分:2)
对于mysql服务器,客户端库太旧也可能是一个错误
我们遇到了类似LIKE和字符“ő”的问题,并使用PHP MySQL库版本5.1.52但MySQL服务器版本5.5.22。
升级客户端库后,问题就消失了。
答案 5 :(得分:0)
试试这个..
CONCAT(CAST(fName AS CHAR CHARACTER SET utf8),CAST('' AS CHAR CHARACTER SET utf8))