MySQL三态字段
我需要创建一个好的/中性的/坏的场。哪一种方法更容易理解/正确。
- 带有 null 的二进制字段(1=好,null=中性,0=坏)
- int(1=好,2=中性,3=坏)
- 枚举(好,中性,坏)
- 任何其他
它是唯一的信息字段并且我不需要通过这个进行搜索。
I need to create a good/neutral/bad field. which one would be the more understandable/correct way.
- A binary field with null (1=good, null=neutral, 0=bad)
- An int (1=good, 2=neutral, 3=bad)
- An enum (good, neutral, bad)
- Any other
It's only and informative field and I will not need to search by this.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
NULL 值应保留用于以下任一情况:
这里的情况都不是。
我只需自己存储一个
CHAR
值,即{'G','N','B'}
集合之一。这可能是最简单的解决方案,占用很少的空间,同时仍然提供助记符值(例如,轻松地将“G”转换为“Good”)。如果您不太关心空间,那么您甚至可以将它们存储为
varchar(7)
或等效形式,并存储实际值{'Good','Neutral','Bad'}
这样您的select
语句中就不需要任何翻译(假设这些是您将要打印的实际值)。NULL values should be reserved for either:
neither of which is the case here.
I would simply store a
CHAR
value myself, one of the set{'G','N','B'}
. That's probably the easiest solution and takes up little space while still providing mnemonic value (easily converting 'G' to 'Good' for example).If you're less concerned about space, then you could even store them as
varchar(7)
or equivalent and store the actual values{'Good','Neutral','Bad'}
so that no translation at all would be needed in yourselect
statements (assuming those are the actual values you will be printing).在 Mysql 中你应该使用枚举类型。您可以选择任何您喜欢的名称,而不必担心空间,因为 Mysql 将数据存储为短整数。请参阅10.4.4。文档中的 ENUM 类型。
In Mysql you ought to be using an enum type. You can pick any names you like without worrying about space, because Mysql stores the data as a short integer. See 10.4.4. The ENUM Type in the documentation.