我在mysql中有一个“name_all”视图,其结构是
colName varchar(30) utf8_general_ci
date varchar(76) utf8_general_ci
name varchar(43) latin1_swedish_ci
当我尝试运行查询时:
SELECT CONCAT(`colname`,' of Mr. ',`name`,' Expire on ',`date`) FROM name_all
它给出错误:
#1271 - Illegal mix of collations for operation 'concat'
"colName" is basically a Column Name which is used as a row in this View
"date" is mysql Date which is converted in this format '%a %D %b, %Y'
"name" is concatenation of firstname, middlename, lastname from a table
我如何解决这个问题以及我的错误是什么?
当我运行查询时SHOW VARIABLES LIKE'collation%' 结果是
Variable_name Value
collation_connection utf8_general_ci
collation_database latin1_swedish_ci
collation_server latin1_swedish_ci
答案 0 :(得分:1)
即使您说“所有表格和列都在latin1_swedish_ci”,您发布的内容是:
colName varchar(30) utf8_general_ci
date varchar(76) utf8_general_ci
name varchar(43) latin1_swedish_ci
将colName和日期排序规则更改为latin1_swedish_ci可能会解决您的问题。
答案 1 :(得分:0)
对于遇到此线程的任何其他人,视图列上的排序规则由基础表列确定,除非该列是视图中定义的硬编码字符串(例如,定义某个字符串值的CASE)。在这些情况下,排序规则由视图创建期间指定的字符集确定。在视图定义期间,像HeidiSQL这样的导出客户端可能包含可执行注释,这些注释将字符集设置为除预期集之外的默认值。当您重新运行定义时,您现在已经保存了不匹配的集合。运行"显示来自viewName&#34的完整列;检查。