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

この問題を解決するにはどうすればよいですか?私の間違いは何ですか?

クエリを実行するとSHOWVARIABLESLIKE'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と日付の照合をlatin1_swedish_ciに変更すると、おそらく問題が解決します。

于 2012-06-06T05:34:10.883 に答える