Недопустимое сочетание сопоставлений (latin1_swedish_ci, IMPLICIT) и (utf8_general_ci, COERCIBLE) для операции '=';

У меня есть схема MySQL с кодировкой по умолчанию utf8 и сопоставлением utf8_general_ci, и в ней у меня есть несколько таблиц / столбцов с сопоставлением latin1_swedish_ci

У меня также есть хранимая процедура, которая принимает VARCHAR как параметр pi_hashid. Основываясь на этом ответе https://stackoverflow.com/a/21687188/1094300, я хотел ускорить выполнение процедуры, изменение хранимой процедуры, чтобы иметь

where d.hash_id = convert(pi_hashid using latin1) collate latin1_swedish_ci

но после изменения я получаю исключение для недопустимого сочетания сопоставлений, я снова изменил процедуру (отменил изменения) на

where d.hash_id=pi_hashid

но это по-прежнему составляет для меня исключение. Почему я не могу отменить изменения, и есть ли другой способ исправить это, не изменяя все таблицы / столбцы, чтобы они имели такое же сопоставление, что и схема.

ОБНОВЛЕНИЕ: ПОКАЗАТЬ СОЗДАТЬ ПРОЦЕДУРУ company_get

company_get,,"CREATE DEFINER=`root`@`%` PROCEDURE `company_get`( IN pi_hashId varchar(50) )
BEGIN

SELECT
        ce.duns_number as duns
       ,ce.hash_id
       ,ce.company_name                 

           ,ce.Telephone_number as telephone
       ,ce.Facsimile_number as facsimile
       ,ce.Full_line_of_business_description as lob_des
       ,ce.Trading_Description as sic_lob_description
       ,concat(ce.US72_SIC1,ce.US72_SIC2,ce.US72_SIC3,ce.US72_SIC4,ce.US72_SIC5,ce.US72_SIC6) as us_sic
       ,ce.US72_SIC1
       ,ce.US72_SIC2
       ,ce.US72_SIC3
       ,ce.US72_SIC4
       ,ce.US72_SIC5
       ,ce.US72_SIC6


        ,case when cast(ce.Registration_number as decimal(10,0)) > 0
                    then concat( ce.Registration_number_prefix
                        ,lpad(cast(ce.Registration_number as decimal(10,0))
                            ,8 - length(ce.Registration_number_prefix)
                            ,'0')
                    ) 
                else ''
                end as Registration_number
       ,ce.Immediate_parent_DUNS_number as immediate_parent_DUNS
       ,ce.Immediate_parent_name 
       ,ce.Immediate_parent_country
       ,ce.Ultimate_parent_country 
       ,ce.Ultimate_parent_DUNS_number as Ultimate_parent_DUNS
       ,ce.Ultimate_parent_name 
       ,ce.Nominal_Capital
       ,ce.Issued_capital
       ,ce.Annual_Return_date
       ,ce.Pretax_Profit_1 as Pretax_Profit_1
       ,'' as pretax_loss_indicator
       ,ce.Year_Started
       ,ce.Date_Of_Incorporation as incorporation_date
       ,ce.Description_of_Brands as brands_description
       ,ce.Turnover_1
       ,ce.Net_Assets_1
       ,ce.Employees_Company_1 as no_employess1
       ,ce.Non_Audit_Fee_1
       ,ce.Auditors_Name_1 
       ,ce.Statement_date_2 as previous_statement_date
           ,c.major_sector_description
       ,c.sub_sector_description
       ,c.market_sector_description


           ,if(ce.Flag_to_indicate_branch_financials_populated_with_HQ_financials='Y',ce.Ultimate_parent_name,'')as hq_name
       ,ce.Net_Worth_1 as networth
       ,ce.Net_Profit_1  as profit
       ,ce.Annual_Local_Sales as sales
       ,ce.Year_Started as yr_start



       ,if ( (select paf_udprn from uf_dnb.companies where hash_id=sha(ce.Immediate_parent_DUNS_number))>0,sha(ce.Immediate_parent_DUNS_number),NULL  )   as immediate_parent_hash_id
       ,if ( (select paf_udprn from uf_dnb.companies where hash_id=sha(ce.Ultimate_parent_DUNS_number))>0,sha(ce.Ultimate_parent_DUNS_number),NULL  ) as ultimate_parent_hash_id
       ,if ( (select paf_udprn from uf_dnb.companies where hash_id=sha(ce.Ultimate_parent_DUNS_number))>0,sha(ce.Ultimate_parent_DUNS_number),NULL  )   as hq_hash_id

        ,ce.Gross_Profit_1
        ,ce.Operating_Profits_1
        ,ce.Total_Assets_1
        ,ce.Total_Liabilites_1
        ,ce.Working_Capital_1
        ,ce.Retained_Profits_1
        ,ce.Trading_Style_1 
       ,c.paf_udprn 
       ,c.paf_subbuild 
       ,c.paf_buildname 
       ,c.paf_buildno 
       ,c.paf_sub_street 
       ,c.paf_street 
       ,c.paf_sub_locality 
       ,c.paf_locality
       ,c.paf_post_town 
       ,c.paf_region
       ,c.paf_postcode 
       ,c.paf_postal_county 
       ,c.paf_area
       ,c.paf_district
       ,c.paf_gre
       ,c.paf_grn 

 FROM
           uf_dnb.companies_extended ce
           join uf_dnb.companies c
           on ce.hash_id=c.hash_id
   WHERE 
           ce.hash_id=pi_hashid;
END",utf8,utf8_general_ci,utf8_general_ci

person tibortru    schedule 21.12.2015    source источник
comment
Укажите соответствующий код. И проверьте CHARACTER SET хранимой процедуры, выполнив SHOW CREATE PROCEDURE ...; есть дополнительная колонка, которая меня удивляет.   -  person Rick James    schedule 22.12.2015
comment
Теперь давайте посмотрим SHOW CREATE TABLE для двух таблиц (c, ce). Я подозреваю, что один объявлен как utf8, а другой - latin1. Если вы сохраняете вывод if sha1 в шестнадцатеричные столбцы, тогда они также могут быть CHARACTER SET ascii, поскольку значение шестнадцатеричное. utf8 - это перебор для таких. Или сократите размер пополам до BINARY(20), а затем поместите в него UNHEX(sha1(...)).   -  person Rick James    schedule 22.12.2015
comment
Я добавил stackoverflow.com/questions/3029321/, так что теперь это действительно дублированный поток.   -  person Rick James    schedule 22.12.2015