Oracle 空字符串

标签 oracle orm varchar2

你们如何用 Oracle 处理空字符串?

声明 #1 :Oracle 将“varchar2”字段中的空字符串(例如 '')视为 NULL。
声明#2 :我们有一个定义抽象“表结构”的模型,其中我们有字段,即 不能为 NULL,但 可以 成为“空”。该模型适用于各种 DBMS;几乎在任何地方,一切都很好,但不是 Oracle。您不能将空字符串插入“非空”字段中。
声明 #3 :在我们的例子中不允许非空默认值。

那么,有人会这么好心告诉我 - 我们如何解决它?

最佳答案

这就是为什么我一直不明白为什么 Oracle 如此受欢迎。基于他们多年前做出的一个愚蠢决定,他们实际上并不遵循 SQL 标准。

Oracle 9i SQL Reference 指出(至少在三个主要版本中已经存在):

Oracle currently treats a character value with a length of zero as null. However, this may not continue to be true in future releases, and Oracle recommends that you do not treat empty strings the same as nulls.



但他们没有说你应该做什么。我发现解决这个问题的唯一方法是:
  • 有一个不能在您的真实数据中出现的标记值来表示 NULL(例如,姓氏字段的“脱氧核糖核”,并希望电影明星不要开始给他们的 child 起奇怪的姓氏和奇怪的名字:-)。
  • 有一个单独的字段来指示第一个字段是否有效,基本上是真实数据库对 NULL 的处理。
  • 关于Oracle 空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/692202/

    相关文章:

    oracle - 比较 VARCHAR2 与 CHAR 的最佳方式

    oracle - 为什么 Oracle varchar2 有一个强制大小作为定义参数?

    sql - 创建产品用户配置文件时出现问题

    java - 从 spring mvc 应用程序并行更新 oracle 表

    orm - NHibernate 的 DDD 存储库模式

    python - 如何在 SQLAlchemy (ORM) 中为 3 个表建立多对多关系模型?

    linux - 甲骨文毫秒 : Avoid blank-padding in Embedded SQL

    java - 使用 Hibernate 将数据库从 mysql 更改为 oracle

    sql - Oracle 对软删除实现约束

    node.js - Sails.js 如何将数据插入连接表(多对多)