在MySQL中实现ac/c ++样式union作为列

Mic*_*ael 6 c mysql unions

朋友们,

我有一个奇怪的需要,无法思考我的问题.由于关键字回收,优秀而强大的Google几乎没有帮助(正如您所见).你能帮我吗?

我想要做的是将多种类型的数据存储在MySQL的单个列中.

这是一个等同于C联合的数据库(如果你搜索MySQL和Union,你显然在SQL中的UNION关键字上得到了很多东西).

[随后简化案例]因此,让我们说我们有人 - 有名字 - 和STORMTROOPERS - 有TK号码.您不能同时拥有名称和TK编号.你要么是BOB SMITH - 或者 - TK409.

在CI中可以将其表达为联盟,如下所示:

union {
        char * name;
        int tkNo;
      } EmperialPersonnelRecord;
Run Code Online (Sandbox Code Playgroud)

这使得它,这样我要么存储一个指向字符数组在类型EmperialPersonnelRecord的ID,但不是两者.

我在列上寻找MySQL等价物.我的列将存储int,double或varchar(255)(或任何组合).但只占用最大元素的空间.

这可能吗?

(当然,只要有足够的时间,金钱和意志,任何事情都是可能的 - 我的意思是,如果我是穷人,懒惰并且在截止日期之前有可能......也就是"开箱即用")

DVK*_*DVK 4

正如 a1ex07 所说,您可以通过存储字符串表示来做到这一点。但如果您担心空间问题,则将实际值存储在多个可为 NULL 的列中可能会节省更多空间。

或者,创建辅助表并标准化,例如

您的愿望:

表格1
|id|姓名或TK#|

你可以做:

表格1
|id|姓名|TK|

或者你可以做

表格1
|id|ST_or_ human_flag|人类和冲锋队共有的其他列

表2 - 人类姓名
|id|姓名|

表3 - TKs_of_ST
|id|TK|