我在PhpMyadmin上遇到了同样的错误,并且在这里指出的解决方案对我有用
只需从上一个问题得到此答案,它就可以治疗!
SELECT username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount
FROM ratings WHERE month='Aug' GROUP BY username HAVING TheCount > 4
ORDER BY TheAverage DESC, TheCount DESC
但是当我在其中多加一点时会出现此错误:
文档#1267-非法混合校对(latin1_swedish_ci,IMPLICIT)和(latin1_general_ci,IMPLICIT)用于操作'='
SELECT username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount FROM
ratings WHERE month='Aug'
**AND username IN (SELECT username FROM users WHERE gender =1)**
GROUP BY username HAVING TheCount > 4 ORDER BY TheAverage DESC, TheCount DESC
表为:
id, username, rating, month
检查每个表的排序规则类型,并确保它们具有相同的排序规则。
之后还要检查您在操作中使用的每个表字段的排序规则类型。
我遇到了相同的错误,这个技巧对我有效。
主要是这里的问题,只是像这样强制转换字段(以varchar为字段)或强制转换(以日期为字段)
我也遇到同样的错误,但在我的情况下,主要问题是在[[where
SELECT username, AVG(rating) as TheAverage, COUNT(*) as TheCount
FROM ratings
WHERE month='Aug'
AND username COLLATE latin1_general_ci IN
(
SELECT username
FROM users
WHERE gender = 1
)
GROUP BY
username
HAVING
TheCount > 4
ORDER BY
TheAverage DESC, TheCount DESC;
HAvING TheCount > 4 AND username IN (SELECT username FROM users WHERE gender=1)
这里是检查哪些列是错误的排序规则的方法:
SELECT table_schema, table_name, column_name, character_set_name, collation_name
FROM information_schema.columns
WHERE collation_name = 'latin1_general_ci'
ORDER BY table_schema, table_name,ordinal_position;
这是要修复它的查询:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET latin1 COLLATE 'latin1_swedish_ci';
[MySQL]
在这些(非常罕见的情况下:)>
值不是来自表,而是来自显式枚举,例如:
选择1个AS编号联合全部选择2联合全部选择3
您可以使用CAST或CONVERT比较不同表之间的值:
CAST('my text' AS CHAR CHARACTER SET utf8) CONVERT('my text' USING utf8)
请参见MySQL网站上的CONVERT and CAST documentation。>>
我在PhpMyadmin上遇到了同样的错误,并且在这里指出的解决方案对我有用
ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci
Illegal mix of collations MySQL Error我也建议使用General而不是swedish,因为这是默认设置,除非您的应用程序使用瑞典语,否则不要使用该语言。
我认为您应该转换为utf8
--set utf8 for connection
SET collation_connection = 'utf8_general_ci'
--change CHARACTER SET of DB to utf8
ALTER DATABASE dbName CHARACTER SET utf8 COLLATE utf8_general_ci
--change CHARACTER SET of table to utf8
ALTER TABLE tableName CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci
alter table users convert to character set latin1 collate latin1_swedish_ci;
您需要将每个列排序规则
我在where子句的存储过程中遇到了相同的错误。我发现该问题是由先前由同一表/列加载的局部声明的变量引起的。
我解决了将数据转换为单个字符类型的问题。
简而言之,此错误是由MySQL试图对具有不同排序规则设置的两件事进行操作引起的。如果您使设置匹配,错误将消失。当然,您需要根据数据库的用途来选择正确的设置。
以下是在两个非常常见的utf8归类之间进行选择的一些好的建议:What's the difference between utf8_general_ci and utf8_unicode_ci
如果使用的是phpMyAdmin,则可以通过处理错误消息中提到的表并检查每一列的排序规则类型来系统地进行此操作。首先,您应该检查哪个是数据库的整体排序规则设置-phpMyAdmin可以告诉您,并在必要时进行更改。但是每个表中的每一列都可以有自己的设置。通常,您将希望所有这些都匹配。
在小型数据库中,这很容易手动完成,在任何情况下,如果您完整阅读错误消息,通常会将您指向正确的位置。别忘了查看带有子表的列的“结构”设置。当您找到不匹配的排序规则时,可以直接使用phpMyAdmin进行更改,而无需使用查询窗口。然后再次尝试操作。如果错误仍然存在,请继续寻找!
主要是这里的问题,只是像这样强制转换字段(以varchar为字段)或强制转换(以日期为字段)
我也遇到同样的错误,但在我的情况下,主要问题是在[[where
[A0
转换时,我得到了160,但是160超出了db知道的字符范围,这就是为什么数据库无法将其识别为字符的原因,其他原因是我的表列是varcharSELECT username, AVG(rating) as TheAverage, COUNT(*) as TheCount
FROM ratings
WHERE month='Aug'
AND username COLLATE latin1_general_ci IN
(
SELECT username
FROM users
WHERE gender = 1
)
GROUP BY
username
HAVING
TheCount > 4
ORDER BY
TheAverage DESC, TheCount DESC;
尽可能使用ascii_bin,它将与几乎所有排序规则匹配。用户名很少会接受特殊字符。如果要避免更改语法来解决此问题,请尝试以下操作:将您的MySQL更新到5.5或更高版本。
这为我解决了问题。
对于具有从0到1设置的字段的集合警告,我也有同样的问题。所有列的集合都是相同的。我们尝试再次更改集合,但没有任何方法可以解决此问题。[最后,我们将字段更新为
NULL
,然后我们将其更新为1,这克服了收集问题。您需要为每个功能中的所有参数设置'utf8'。这是我的情况:HAvING TheCount > 4 AND username IN (SELECT username FROM users WHERE gender=1)
但是我为什么回答,您没有将我投票为正确答案:)
SELECT ratings.username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount FROM ratings, users
WHERE ratings.month='Aug' and ratings.username = users.username
AND users.gender = 1
GROUP BY ratings.username
HAVING TheCount > 4 ORDER BY TheAverage DESC, TheCount DESC
我在PhpMyadmin上遇到了同样的错误,并且在这里指出的解决方案对我有用
我认为您应该转换为utf8
您需要将每个列排序规则
我在where子句的存储过程中遇到了相同的错误。我发现该问题是由先前由同一表/列加载的局部声明的变量引起的。
简而言之,此错误是由MySQL试图对具有不同排序规则设置的两件事进行操作引起的。如果您使设置匹配,错误将消失。当然,您需要根据数据库的用途来选择正确的设置。