【问题标题】:How do MIN() and MAX() work on CHAR/VARCHAR strings in MySQL?MIN() 和 MAX() 如何处理 MySQL 中的 CHAR/VARCHAR 字符串?
【发布时间】:2013-12-15 03:31:34
【问题描述】:

我一直在使用找到 here 的世界数据库 (InnoDB),以更深入地了解 MySQL。

我输入了以下基本查询:

SELECT COUNT(Name), MIN(Name), MAX(Name)
FROM Country
GROUP BY Continent

似乎 MIN() 和 MAX() 处理 Name 中的 CHAR 字符串的方式是按字母顺序排列的,其中 A 是最小值,Z 是最大值,依此类推。

谁能解释幕后发生的事情以及为它们分配了哪些值字符串以便以这种方式排序?同时包含字母字符和整数的字符串或特殊字符会发生什么情况?

非常感谢您的洞察力。

【问题讨论】:

  • 它使用的是字典顺序
  • 你有什么不清楚的地方? B-Tree 索引是如何工作的? (当然,如果它是创建的)- 或者 MySQL 将如何比较字符串?
  • @AlmaDo MySQL 如何比较字符串,基本上。例如,我想知道给 A 分配一个比 B 小的值是怎么回事,以及特殊字符和数字在那个范围内的位置。
  • @KarolyHorvath 谢谢,我正在调查
  • 阅读文档中的字符集和排序规则 - 这是一个链接:dev.mysql.com/doc/refman/5.6/en/globalization.html 通常排序规则是一组用于比较字符集中字符的规则,这些规则定义了 A q > w

标签: mysql


【解决方案1】:

MySQL 字符串比较,技术上称为 collat​​ion,是依赖于语言环境的。我建议阅读关于排序规则的部分10.1.1,关于MySQL 排序规则的10.1.2 和关于排序规则问题的10.1.7。在http://collation-charts.org/ 上,您可以找到有关各个排序规则的详细信息,例如一个叫做latin1_general_ci(其中_ci 代表不区分大小写)。调用MAXMIN 时使用的排序规则应该是相关列的排序规则,除非您使用MAX(Name COLLATE latin1_german2_ci) 之类的公式指定不同的排序规则。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-14
    • 2012-07-25
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 2016-08-27
    相关资源
    最近更新 更多