違法な組み合わせの照合

Joomla 3.8.6、CiviCRM 4.7.31、PHP 7.0.28、mysql 5.6.39を使用する

CiviCRMテーブルのデータベース照合はどのようにすべきですか?
私のすべてはutf8_general_ciです。データベースのどのテーブルもutf8_unicode_ciではありませんが、私は以下の違法なミックスエラーを受け取ります。開始時(4.7.31にアップグレードした後かもしれません)は確信していますが、
“Reports listing”または “Contribution
Reports”のようなレポートコレクションの1つをクリックすると、次のエラーが発生します。

“1267
**不正な組み合わせの照合(utf8_unicode_ci、IMPLICIT)および(utf8_general_ci、IMPLICIT)操作
‘='”

エラーは、CRM /レポート/ページ/ InstanceList.phpから来ているようです。
以下のトレースバックを参照してください。

編集:私は今、レポートメニュー全体がそうではないことを認識しています。これは次のようになります。

enter image description here

一方、これは次のようになります。

enter image description here

これはアップグレードに関する問題 CRM-12136 に関連していますか?

もしそうなら、私はどのようにレポートメニューを修正できますか?ありがとう。

[debug_info] => 
    SELECT inst.id, inst.title, inst.report_id, inst.description,  inst.owner_id, v.label, v.grouping, v.name as class_name,
    CASE
      WHEN comp.name IS NOT NULL THEN SUBSTRING(comp.name, 5)
      WHEN v.grouping IS NOT NULL THEN v.grouping
      ELSE 'Contact'
      END as compName
      FROM civicrm_option_group g
      LEFT JOIN civicrm_option_value v
             ON v.option_group_id = g.id AND
                g.name  = 'report_template'
      LEFT JOIN civicrm_report_instance inst
             ON v.value = inst.report_id
      LEFT JOIN civicrm_component comp
             ON v.component_id = comp.id

      WHERE v.is_active = 1  AND v.component_id = 2 
            AND inst.domain_id = 1
      ORDER BY  v.weight ASC, inst.title ASC [nativecode=1267 ** Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '=']
[type] => DB_Error
[user_info] => 
    SELECT inst.id, inst.title, inst.report_id, inst.description,  inst.owner_id, v.label, v.grouping, v.name as class_name,
    CASE
      WHEN comp.name IS NOT NULL THEN SUBSTRING(comp.name, 5)
      WHEN v.grouping IS NOT NULL THEN v.grouping
      ELSE 'Contact'
      END as compName
      FROM civicrm_option_group g
      LEFT JOIN civicrm_option_value v
             ON v.option_group_id = g.id AND
                g.name  = 'report_template'
      LEFT JOIN civicrm_report_instance inst
             ON v.value = inst.report_id
      LEFT JOIN civicrm_component comp
             ON v.component_id = comp.id

      WHERE v.is_active = 1  AND v.component_id = 2 
            AND inst.domain_id = 1
      ORDER BY  v.weight ASC, inst.title ASC [nativecode=1267 ** Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '=']
[to_string] => [db_error: message="DB Error: unknown error" code=-1 mode=callback callback=CRM_Core_Error::handle prefix="" info="
    SELECT inst.id, inst.title, inst.report_id, inst.description,  inst.owner_id, v.label, v.grouping, v.name as class_name,
    CASE
      WHEN comp.name IS NOT NULL THEN SUBSTRING(comp.name, 5)
      WHEN v.grouping IS NOT NULL THEN v.grouping
      ELSE 'Contact'
      END as compName
      FROM civicrm_option_group g
      LEFT JOIN civicrm_option_value v
             ON v.option_group_id = g.id AND
                g.name  = 'report_template'
      LEFT JOIN civicrm_report_instance inst
             ON v.value = inst.report_id
      LEFT JOIN civicrm_component comp
             ON v.component_id = comp.id

      WHERE v.is_active = 1  AND v.component_id = 2 
            AND inst.domain_id = 1
      ORDER BY  v.weight ASC, inst.title ASC [nativecode=1267 ** Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '=']"]
ベストアンサー

最初にデフォルト照合を確認します。それが異なる場合は、暗黙の変換を引き起こしている可能性があります。

show variables like 'collat%';

そうでない場合は、個々の列が独自の照合順序を持つことができることに注意してください。特定のレポートクエリでは問題は起こりそうにないようですが、個々の列定義を確認してください。

show create table civicrm_report_instance;

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です