mysql创建视图列为utf8_bin而不是utf8_general_ci

时间:2014-04-01 17:32:35

标签: mysql database database-design collation

我正在尝试为我的数据库创建一个视图。

CREATE VIEW `latest` AS
SELECT r.id as recheck_id, f.id as failure_id, r.`when`,
case
    when r.description like _utf8'dummy' then f.description
    else r.description
end as description,
case
    when r.technician_id is null then f.technician_id
    else r.technician_id
end as technician_id,
case
    when r.technician_id is null then f.tname
    else r.name
end as tech_name,
case
    when r.technician_id is null then f.tsurname
    else r.surname
end as tech_surname,
f.customer_id, f.name as cust_name, f.surname as cust_surname, f.area,
case
    when r.telephone is null then f.telephone
    else r.telephone
end as telephone, mobile,
f.appliance_id, f.type, f.model, f.brand,
f.budget, f.advance_payment, f.final_price
FROM rechecks_with_info r
left join failures_with_info f on f.id = r.failure_id
where `when` =
(select max(r2.`when`)
from rechecks r2
where r.failure_id = r2.failure_id)
order by `when` desc;

一切正常,直到我尝试在description

中搜索字符串

我收到Illegal mix of collations (utf8_bin,NONE) and (utf8_general_ci,COERCIBLE) for operation 'like'错误。

我检查了特定列的排序规则,默认情况下确实设置为utf8_bin。所有其他列都在utf8_general_ci

有没有办法可以为视图中的特定列指定所需的排序规则?

我尝试在description列定义后添加特定的排序规则,但我得到了错误。

1 个答案:

答案 0 :(得分:0)

我刚才发现了这个问题,想到了分享。

事实证明,表格列中读取的两个描述不是相同的排序规则。一个是utf8_general_ci,另一个是utf8_unicode_ci。他们的混合产生了utf8_bin整理柱。

对两个表使用相同的排序规则产生了正确的结果。