首先,英语不是我的母语,如果我犯了一些错误,请原谅我。 当我尝试将数据从mysql5.7推送到Redis时,会发生此问题,这与MySQL操作 concat 有关。
在没有 UNION ALL 的情况下,我将其拆分为2个SQL,它可以工作。但是,一旦我使用 UNION ALL '运行它,就会发生错误。
[Err] 1271-操作连续的排序规则的非法混合
SELECT CONCAT(
"*4\r\n",
'$',LENGTH(redis_cmd),'\r\n',redis_cmd,'\r\n',
'$',LENGTH(redis_key),'\r\n',redis_key,'\r\n',
'$',LENGTH(redis_score),'\r\n',redis_score,'\r\n',
'$',LENGTH(redis_val),'\r\n',redis_val,'\r'
)
FROM (
SELECT
'ZADD' AS redis_cmd,
'GS_TM' AS redis_key,
s1.QSH AS redis_score,
CONCAT(s1.GS,':',s1.QSH,':0') AS redis_val
FROM
gstmfw s1
UNION ALL
SELECT
'ZADD' AS redis_cmd,
'GS_TM' AS redis_key,
s2.ZZH AS redis_score,
CONCAT(s2.GS,':',s2.ZZH,':1') AS redis_val
FROM
gstmfw s2
) AS gstmfw;
我想用一个sql完成整个工作,但不是解决方案。 最后,感谢您的阅读和帮助。
答案 0 :(得分:1)
检查表架构中您实际使用的排序规则
尝试将错误的排序规则(或两者都)转换为相同的
例如usint utf8
SELECT CONCAT(
"*4\r\n",
'$',LENGTH(redis_cmd),'\r\n',redis_cmd,'\r\n',
'$',LENGTH(redis_key),'\r\n',redis_key,'\r\n',
'$',LENGTH(redis_score),'\r\n',redis_score,'\r\n',
'$',LENGTH(redis_val),'\r\n',redis_val,'\r'
)
FROM (
SELECT
'ZADD' AS redis_cmd,
'GS_TM' AS redis_key,
s1.QSH AS redis_score,
CONCAT(s1.GS,':',s1.QSH,':0') AS redis_val
FROM
gstmfw s1
UNION ALL
SELECT
convert('ZADD' USING utf8) AS redis_cmd,
convert('GS_TM'USING utf8) AS redis_key,
convert(s2.ZZH USING utf8) AS redis_score,
convert(CONCAT(s2.GS,':',s2.ZZH,':1') USING utf8) AS redis_val
FROM
gstmfw s2
) AS gstmfw;
答案 1 :(得分:0)
表/列的排序规则不同。
示例:latin1_swedish_ci
和utf8_general_ci
这篇文章可以帮助您:error Illegal mix of collations for concat
这是Illegal mix of collations for operation 'concat'