操作“=”的排序规则的非法混合

Posted

技术标签:

【中文标题】操作“=”的排序规则的非法混合【英文标题】:Illegal mix of collations for operation '=' 【发布时间】:2016-12-08 20:20:22 【问题描述】:

我想从表'invoice_data'中选择数据,其中公司名称的值将从表'crm_accounts'中按电子邮件值选择。我收到类似

的错误

用于操作“=”的排序规则 (utf8_unicode_ci,IMPLICIT) 和 (utf8_general_ci,IMPLICIT) 的非法混合

这是我的型号代码:

public function view_invoice($email)
    
        $this->db->select('invoice_data.*, crm_accounts.company');
        $this->db->from('invoice_data');
        $this->db->join('crm_accounts', 'invoice_data.cname = crm_accounts.company', 'inner');
        $this->db->where('crm_accounts.email', $email);
        $query = $this->db->get();
        return $query->result_array();
    

【问题讨论】:

看起来你的表有不同的排序规则 对不起,我不明白这是什么意思? 您的表格有不同的编码 【参考方案1】:

试试这个;

public function view_invoice($email)

    $this->db->select('invoice_data.*, crm_accounts.company');
    $this->db->from('invoice_data');
    $this->db->join('crm_accounts', 'invoice_data.cname = crm_accounts.company COLLATE utf8_unicode_ci', 'inner');
    $this->db->where('crm_accounts.email', $email);
    $query = $this->db->get();
    return $query->result_array();

【讨论】:

你能描述一下吗?? 我添加了“COLLATE utf8_unicode_ci”,因此 crm_accounts.company 的排序规则与 invoice_data.cname 的排序规则相匹配。两个表的排序规则似乎不同,SQL 无法在不解析其中一个的情况下比较不同的排序规则。 知道了。谢谢。 它解决了我的问题,但现在它说检查 MariaDB 服务器的版本是否有正确的语法。我该怎么做? 您能分享一下生成的查询吗?

以上是关于操作“=”的排序规则的非法混合的主要内容,如果未能解决你的问题,请参考以下文章

MySQL某些字符导致“非法混合排序规则”错误

使用 Ignited-Datatables 搜索时非法混合排序规则以进行“like”操作

MySQL 非法混合排序规则

MySQL 视图 - 排序规则的非法混合

MySql 中的非法混合排序规则错误

排序规则的非法混合 MySQL 错误