应用行号时的MySQLÑ拉丁字符

时间:2016-10-23 22:45:30

标签: mysql numbers row iso-8859-1

我有一个数据库,其中包含CHARSET = latin1 COLLATE = latin1_spanish_ci,MySQL中的这个表名为category

category    name      time
niños       kid1     0:13:00
niños       kid2     0:24:00
niños       kid3     0:17:00
niños       kid4     0:23:00

当尝试应用row_number概念时,它不计算在内。似乎没有检测到“类别”字段或者不理解带有kids的“niños”字。

我的查询是:

SELECT
  @catPos := IF (@cat = x.`category`, @catPos + 1, 1) AS 'position',
  @cat := x.`category`,
  x.* FROM ( 
     SELECT category, name, time FROM category
     ORDER BY category, time ASC
  )x, (SELECT @catPos:=1)a, (SELECT @cat:='')b;

在此示例中,给定的结果是:

position category    name      time
   1       niños     kid1     0:13:00
   1       niños     kid3     0:17:00
   1       niños     kid4     0:23:00
   1       niños     kid2     0:24:00

预期结果应为

position category    name      time
   1       niños     kid1     0:13:00
   2       niños     kid3     0:17:00
   3       niños     kid4     0:23:00
   4       niños     kid2     0:24:00

表中的charset没有检测到ñ字符有什么问题?

1 个答案:

答案 0 :(得分:0)

我认为您的问题不是字符集(尽管可能是另一个问题)。 MySQL不保证select子句中表达式的评估顺序。因此,变量赋值可以是任何顺序。

我建议:

 SELECT c.*,
        (@rn := if(@c = c.category, @rn + 1,
                   if(@c := c.category, 1, 1)
                  )
        ) as position
 FROM category c CROSS JOIN
      (SELECT @c := '' COLLATE latin1_spanish_ci, @rn := 0) params
 ORDER BY category, time ASC;