MySql在视图中更改排序规则

时间:2012-06-06 05:29:15

标签: mysql collation concat

我在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

2 个答案:

答案 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的完整列;检查。