非法混合整理

时间:2011-12-01 11:48:59

标签: mysql

首先,我应该声明我的数据库不再按以下方式设计。 这纯粹是为了允许以前的档案展示。

SELECT t.user, t.team, t.home_games_played, t.home_wins, t.home_draws, t.home_losses, t.home_points, t.home_goals_for, t.home_goals_against, 
                  t.away_games_played, t.away_wins, t.away_draws, t.away_losses, t.away_points, t.away_goals_for, t.away_goals_against, t.vacant, te.team as teamname, 
                  te.colour
                  FROM tbl_foot_leaguetables t
                  INNER JOIN tbl_foot_teams te ON t.team = te.team
                  WHERE league = '44'
                  ORDER BY t.home_points + t.away_points DESC,(t.home_goals_for + t.away_goals_for) - (t.home_goals_against + t.away_goals_against) DESC, 
                  t.home_goals_for + t.away_goals_for DESC, t.user

此查询会引发以下错误

  

操作'='的非法混合排序(latin1_swedish_ci,IMPLICIT)和(latin1_general_ci,IMPLICIT)

要查询的以下部分是责备

INNER JOIN tbl_foot_teams te ON t.team = te.team

它想要做的是加入两个相同的词。

例如,'葡萄牙'到'葡萄牙'。

这是糟糕的设计,但我必须这样做才能得到我想要的东西。

现在我的数据库连接了ID等。

任何想法如何解决这个问题?或找工作?

感谢。

2 个答案:

答案 0 :(得分:0)

您的表tbl_foot_leaguetablestbl_foot_teams具有不同的排序规则,因此无法直接比较其字符串值。您必须更改一个表的排序规则或使用其他检查。

答案 1 :(得分:0)

整理是错误的。如果你查看phpMyAdmin(我假设你有),你可以看到每个varchar()或其他基于字符串的存储格式的排序规则。

这与字符编码有关。 MySQL将根据该字符集存储数据,如果第一个字符串的编码与其他字符串不同(不同的排序规则),则无法进行二进制比较。这将是对您的查询的主要性能影响,这就是为什么它只是拒绝。

我建议将所有归类值设置为相同(latin1_general_ci很受欢迎,或者甚至是utf8_general_ci,这是每个人都应该使用的)。更改排序通常不会影响数据,只会影响数据的存储方式。如果您将所有内容都切换为UTF-8(utf8_general_ci

,那么您总是安全的