【问题标题】:MySQL-query is not working with NOT INMySQL 查询不适用于 NOT IN
【发布时间】:2015-09-28 18:22:29
【问题描述】:

我正在编写一个无法正常工作的查询

我的查询:

SELECT * 
FROM admin_marker 
WHERE admin_marker.city NOT IN (SELECT target FROM messsage)

它说

#1267 - 排序规则的非法混合
(utf8_general_ci,IMPLICIT) 和
(utf8_unicode_ci,IMPLICIT) 用于操作 '='

【问题讨论】:

  • 检查每个表的排序规则类型,并确保它们具有相同的排序规则。 stackoverflow.com/a/5747047/2899618
  • 两列具有相同的排序规则 utf8_general_ci @Uchiha

标签: php mysql mysql-error-1064


【解决方案1】:

您面临的问题是由于两个表之间的排序规则不兼容。一种解决方法是在查询中使用COLLATE 子句:

SELECT * 
FROM admin_marker 
WHERE admin_marker.city NOT IN (SELECT target COLLATE utf8_general_ci 
                                FROM messsage)

Demo here

【讨论】:

    【解决方案2】:

    问题在于两个表之间的排序,所以请尝试COLLATE,这可能是通过COLLATE的帮助很容易解决的。

    SELECT * FROM admin_marker WHERE admin_marker.city NOT IN (SELECT target COLLATE utf8_general_ci FROM messsage)
    

    并检查其数据库是否相同

    不兼容的排序规则或尝试将不同排序规则的数据选择到组合列中。子句 COLLATE 允许您指定查询中使用的排序规则。

    【讨论】:

      【解决方案3】:

      这通常是由于比较两个不兼容的排序规则字符串或尝试将不同排序规则的数据选择到组合列中引起的。子句COLLATE 允许您指定查询中使用的排序规则。

      或者你可以ALTER TABLE匹配COLLATE

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 2012-08-18
        • 1970-01-01
        相关资源
        最近更新 更多