MySQL Ñ 拉丁字符(当行号适用时)

标签 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 概念时,它不算数。似乎没有检测到“类别”字段,或者不理解“niños”一词的意思是kids

我的查询是:

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

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

最佳答案

我不认为你的问题是字符集(尽管它可能是另一个问题)。 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;

关于MySQL Ñ 拉丁字符(当行号适用时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40208550/

相关文章:

php - 在 while 中从 mysql_fetch_assoc 获取重复值

performance - 有创意的数字猜谜游戏

PHP MYSQL $行[$变量]

iphone - 取消选择 UITableView 中的 subview 行

r - 如何在R中的一个向量中累积添加值

PHP 创建 2 行并且不检查输入

mysql - 创建过程 MySQL 时出现错误 1064 (42000)

mysql - 创建 MySQL 数据库最有效的方法是什么

python - 在同一程序实例中读取文本文件 key 时出现问题

objective-c - 如何避免 NSNumberFormater 中的分组分隔符直到 5 位数字