sql >> データベース >  >> RDS >> Oracle

Oracleはnullと空の文字列を区別していませんか?

    Oracle とてもとてもとても古いです。

    80年代に戻る それが開発されたとき(そして標準が存在する前に)、彼らはそれが良い考えであると考え、そして Oracleに道を譲りました その値を保存します、それは本当にそうでした。

    Oracleの方法は次のとおりです データを保存します(ドキュメントから取得) ):

    データ型はデータ内に保存されず、データ長とデータ自体のみが保存されます。

    NULLの場合 値を持つ2つの列の間に発生し、1バイトとして格納されます。これは、列の長さが 0であることを意味します。 (実際には、 0xFF )。末尾のNULL はまったく保存されません。

    したがって、値を保存するには'test' Oracle 5バイトを格納する必要があります: 04 74 65 73 74

    ただし、空の文字列と NULLの両方を格納するには 、 Oracle データ長を0に設定するだけです 。

    データを20Mb に保存する場合は、非常にスマートです 5,000 $のハードドライブ それぞれ。

    その後、標準が登場したとき、それはもはやそれほど良い考えではありませんでしたが、その時までに、<​​code> NULLに依存するコードがすでにたくさんありました。 および'' 同じことです。

    VARCHARを作成する そのような区別をすることはトンを壊します コードの。

    これを修正するために、彼らは VARCHARに名前を変更しました VARCHAR2へ (これは標準の一部ではありません)、 VARCHAR2 決して NULLを区別する 空の文字列を使用して、代わりにこのデータ型を使用するように全員に促しました。

    今、彼らはおそらく VARCHARを使用した最後の人を待っています Oracleで 死ぬデータベース。



    1. 明示的なANSIJOINと暗黙的な結合の使用に関するOracleの公式推奨事項はありますか?

    2. mysql拡張機能は非推奨であり、将来削除される予定です。代わりにmysqliまたはPDOを使用してください。

    3. mysqlでの条件付き結合

    4. 非同期スレーブを使用したGaleraクラスターのハイブリッドOLTP/分析データベースワークロード