错误代码:1271。在 mysql 上操作 'UNION' 的排序规则混合非法

Error Code: 1271. Illegal mix of collations for operation 'UNION' on mysql

我有一个视图是这样设计的,

 SELECT ('header1,header2,header3,header' ) as `line` 
    UNION ALL 
 SELECT DISTINCT CONCAT(column1,column2,column3,column4) as `line`
from mytables t 
  join table2 gc ON (gc.code = t.code)
where t.myfield = getId() 

getId()函数如下所示,

DELIMITER $$
CREATE FUNCTION `getId`() RETURNS varchar(30) CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci
    NO SQL
    DETERMINISTIC
return @bid$$
DELIMITER ;

为了跟踪错误,我经历了一个消除过程,我通过删除和添加列重新创建了视图,当 column4 添加到视图时发生了错误.

table2 column4 的 table 定义是

CREATE TABLE `table2` (
  `code` int NOT NULL,
  `column4` varchar(100) NOT NULL
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我在视图 theview 上使用以下查询(这是 操作排序规则的非法混合 'UNION'出现错误),

SELECT distinct s.* FROM (SELECT @bid:='AB') parm, `theview` s;

我在其他视图上使用 getId() 函数,但没有收到错误。

根据收到的问题建议,我在第一个查询中添加了 collat​​e utf8mb4_unicode_ci,因此查询现在看起来像,

SELECT ('header1,header2,header3,header' ) collate utf8mb4_unicode_ci as `line`

看起来成功了。