【问题标题】:Why using anything else but VARCHAR2(4000) to store strings in an Oracle database?为什么要使用除 VARCHAR2(4000) 之外的任何其他东西在 Oracle 数据库中存储字符串?
【发布时间】:2012-12-01 06:24:34
【问题描述】:

我发现an Ask Tom article 解释了Oracle 中CHAR 和VARCHAR2 之间没有太大区别。它给人的印象是我应该对我想存储字符串的每一列使用 VARCHAR2(4000 BYTE),即使是 ISO 639-1 语言代码,因为它没有任何区别。

我知道对 ISO 639-1 语言代码使用 CHAR(2) 来强制执行基本数据约束是有意义的。但这不是一个充分的约束,因为它允许将'xy' 存储在不是有效语言代码的列中。另一方面,我为这个基本约束付费,但如果我想更改我的应用程序以使用需要 3 个字符的 ISO 639-2 语言代码,我必须更改数据库。所以我倾向于从数据库层面完全放弃约束,因为在我看来成本高于收益。

考虑到这一点,我想知道是否有任何其他重要原因我不应该将 VARCHAR2(4000 BYTE) 用于我打算存储在 Oracle 数据库中的任何短于 4000 字节的字符串?

【问题讨论】:

  • +1。为什么不赞成这个?有点争议的方法,但仍然是一个很好的问题,可以为人们澄清重要的事情。比大量的“hello world”sql 问题更有趣。

标签: oracle database-design


【解决方案1】:

【讨论】:

  • 我希望 Tom Kyte 在 SO
  • 他的回答假设 Oracle 为字符串分配了最大长度,尽管字符串较小。没有其他编程语言可以做到这一点。甲骨文这样工作真的正确吗?
  • 好吧,索引块大小问题是个真正的问题。
  • 有些问题会,有些则不会。索引大小存在严重问题,因为 Oracle 会假设在某些时候您会想要使用整个列大小,并且它必须适合单个块。请注意,您可以对 substr(column,1,100) 进行索引并进行适当的查询。客户端应用程序也可能存在严重的内存问题。最后,您必须对公司名称(例如)的合理长度做出一些实际决定,以便您可以适当地调整用户界面元素的大小,这也可能是在数据建模阶段。
  • 我对你的立场的同情已经烟消云散了。只关心自己的问题的人在软件开发中没有立足之地。
猜你喜欢
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多