最适合存储版本号的数据类型?或使用程序解决方法?

时间:2014-01-23 16:44:54

标签: mysql

目前我们有一个datagrid(php)来存储一些已部署代码的代码和版本号,但是我在使用哪种数据类型来存储版本号时遇到了一些问题。

我正在考虑创建名为major,minor和revision的3个字段(tinyint),但是这会给我一些关于datagrid的问题,因为我们希望用户只插入完整版本号

前:

 Insert version : 1.10.1

而不是那样:

Insert major : 1
Insert minor : 10
Insert rev.  : 1

那么,我应该用什么数据类型来存储版本?或者,最好创建一个过程将版本的输入分成3个字段?

编辑:我需要拆分值的主要原因是因为在每次部署到生产之前我需要通过最新版本查询代码。

3 个答案:

答案 0 :(得分:1)

将每个部分存储在它自己的列中作为(微小的)整数:

version
-------
major
minor
patch
build

这样可以在调用时轻松排序和连接。

如果其他表将引用复合键,则可以使用复合键或创建代理键。

答案 1 :(得分:0)

由于您不打算对其进行任何计算,因此无需将其存储为整数。一个简单的字符串字段就可以了。

此外,如果您拥有类似1.2a的版本,它也适用于同一领域。

您可以使用strtok将其拆分为各种组件。

答案 2 :(得分:0)

我能够通过使用这个简单的解决方案来解决这个问题:

添加以下字段:

 major
 minor

创建两个触发器:

插入:

 CREATE DEFINER=`root`@`%` TRIGGER `insert`
 BEFORE INSERT ON `version_test`
 FOR EACH ROW
 BEGIN
         set new.major = SUBSTRING_INDEX(new.code_version,'.',1),
             new.minor = SUBSTRING_INDEX(new.code_version,'.',-1);
 END

更新

 CREATE DEFINER=`root`@`%` TRIGGER `update`
 BEFORE UPDATE ON `version_test`
 FOR EACH ROW
 BEGIN 
      SET new.major=SUBSTRING_INDEX(new.code_version,'.',1),
          new.minor=SUBSTRING_INDEX(new.code_version,'.',-1);
 END

我真的希望这有助于某人。