错误代码: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() 函数,但没有收到错误。
根据收到的问题建议,我在第一个查询中添加了 collate utf8mb4_unicode_ci,因此查询现在看起来像,
SELECT ('header1,header2,header3,header' ) collate utf8mb4_unicode_ci as `line`
看起来成功了。
我有一个视图是这样设计的,
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() 函数,但没有收到错误。
根据收到的问题建议,我在第一个查询中添加了 collate utf8mb4_unicode_ci,因此查询现在看起来像,
SELECT ('header1,header2,header3,header' ) collate utf8mb4_unicode_ci as `line`
看起来成功了。