4

我在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 'collat​​ion%' 结果是

  Variable_name         Value
  collation_connection  utf8_general_ci
  collation_database    latin1_swedish_ci
  collation_server      latin1_swedish_ci
4

2 回答 2

6

对于遇到此线程的任何其他人,视图列的排序规则由基础表列确定,除非该列是视图中定义的硬编码字符串(例如,定义某些字符串值的 CASE)。在这些情况下,排序规则由视图创建期间指定的字符集确定。在视图定义期间,像 HeidiSQL 这样的导出客户端可能包含将字符集设置为默认值的可执行注释,而不是您的预期设置。当您重新运行定义时,您现在已经保存了不匹配的集合。运行“显示 viewName 的完整列”进行检查。

于 2017-01-04T03:41:17.200 回答
1

即使您说“所有表格和列都在 latin1_swedish_ci 中”,您发布的内容是:

colName   varchar(30)   utf8_general_ci

date   varchar(76)   utf8_general_ci

name   varchar(43)   latin1_swedish_ci

将 colName 和 date 排序规则更改为 latin1_swedish_ci 可能会解决您的问题。

于 2012-06-06T05:34:10.883 回答