如何在 MySQL 数据库中存储版本号

Posted

技术标签:

【中文标题】如何在 MySQL 数据库中存储版本号【英文标题】:How to store version number in MySQL database 【发布时间】:2014-04-13 07:15:50 【问题描述】:

我想将我的应用程序的版本号存储在 mysql 数据库中,例如:

version 1.1.0 1.1.1 1.1.2

我应该使用哪种数据类型。

【问题讨论】:

你可以使用varchar 但是如果将来我想对这些数据进行排序,那将是不可能的 为什么不能排序,加个索引就可以正常排序了? 因为版本号总是从左边的major 到右边的minor 排序,所以排序就好了。唯一的建议是将后缀(alpha、beta、RC 等)和稳定标志存储在单独的字段中。 【参考方案1】:

你有两个选择:

    使用 varchar

    使用三个数字字段,Major、Minor、Patch

    同时使用。

每个选项都有其优点和缺点。

选项1只有一个字段,所以很容易得到版本。但它不一定是可排序的,因为 2.0.0 在字典上会高于 10.0.0。

选项 2 很容易排序,但您必须获得三个字段。

选项3可以使用视图来实现:

Table tversion (
  major NUMBER(3),
  minor NUMBER(3),
  patch NUMBER(3)
)

View vversion is 
  select major || '.' || minor || '.' || patch AS version,
         major * 1000000 + minor * 1000 + patch AS sortorder from tversion;

【讨论】:

选项 2 易于排序?选择版本 好吧,它不会太复杂:(major = 10 and minor @JeromeJaglale 如果您添加选项 3 建议的视图,您可以这样做:vversion.sortorder < 1004002 好的,谢谢。我们可以将“优化”版本号直接存储在表中,但我认为视图使其更易于维护。 @JeromeJaglale 这也是我的想法。【参考方案2】:

您可以使用varchar(),甚至可以使用INET_NTOA。试试这个LINK

【讨论】:

NTOA 会不会将他的版本部分限制为仅 1-255?【参考方案3】:

或者,为什么不直接使用数字?例如:

210061

那就是 21.0.6 Beta 1

我就是这样做的。

但原则是将版本号的多个部分以这样一种方式进行叠加,最终得到版本的整数表示并存储它。

这些数字自然是可排序的。

查看结果时,您可以将其分解为数字所代表的含义。

【讨论】:

【参考方案4】:

我认为对每个部分(主要、次要、修订和构建)使用整数列是最好的解决方案。但是由于某种原因,如果您必须使用一个 varchar 列,那么您可以这样做;

将版本数据1.3.5.79格式化成这样001.003.005.00079

这样比较和排序的问题就解决了。

【讨论】:

【参考方案5】:

在存储不同版本号的同时使用VARCHAR 总是更好。

【讨论】:

如果你只想显示版本号就可以了。如果您想按版本号订购,则需要另寻解决方案。

以上是关于如何在 MySQL 数据库中存储版本号的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Gradle 中获取下一个内部版本号

如何查看mysql版本

如何在 C# windows 服务中使用 Git 标签号代替 SVN 版本号

如何看mysql版本

如何在mysql数据库中鎒moji特殊字符

如何解决在 MySQL 中存储人名的困境,同时保持可辨别性和对相似名称的搜索?