Shu*_*ali 4 mysql concat collation
我在 mysql 中有一个视图“name_all”,它的结构是
colName varchar(30) utf8_general_ci
date varchar(76) utf8_general_ci
name varchar(43) latin1_swedish_ci
Run Code Online (Sandbox Code Playgroud)
当我尝试运行查询时:
SELECT CONCAT(`colname`,' of Mr. ',`name`,' Expire on ',`date`) FROM name_all
Run Code Online (Sandbox Code Playgroud)
它给出错误:
#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
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题,我的错误是什么?
当我运行查询 SHOW VARIABLES LIKE 'collation%' 结果是
Variable_name Value
collation_connection utf8_general_ci
collation_database latin1_swedish_ci
collation_server latin1_swedish_ci
Run Code Online (Sandbox Code Playgroud)
对于遇到此线程的任何其他人,视图列上的排序规则由基础表列确定,除非该列是视图中定义的硬编码字符串(例如,定义某个字符串值的 CASE)。在这些情况下,排序规则由视图创建期间指定的字符集确定。在视图定义导出期间,像 HeidiSQL 这样的客户端可能包含可执行注释,这些注释将字符集设置为您预期设置以外的默认值。当您重新运行定义时,您现在已经保存了不匹配的集合。运行“从viewName 显示完整列”进行检查。
即使您说“所有表和列都在 latin1_swedish_ci 中”,您发布的内容是:
colName varchar(30) utf8_general_ci
date varchar(76) utf8_general_ci
name varchar(43) latin1_swedish_ci
Run Code Online (Sandbox Code Playgroud)
将 colName 和日期排序规则更改为 latin1_swedish_ci 可能会解决您的问题。
| 归档时间: |
|
| 查看次数: |
9156 次 |
| 最近记录: |