web-dev-qa-db-ja.com

OracleのCLOBとBLOBの違いを理解してください

これは主に「私の理解を確認する」タイプの質問です。 Oracleで動作するCLOBとBLOBについての私の理解は次のとおりです。

  • CLOBは、XML、JSONなどのテキスト用です。データベースが使用するように構成されたエンコードに変換されるため、データベースが(少なくともアプリケーション内で)格納するエンコードを想定しないでください。
  • BLOBはバイナリデータ用です。あなたはそれらがあなたがそれらを送信する方法で保存され、あなたがそれらが送信されたのと全く同じデータでそれらを取り戻すことを合理的に保証することができます。

つまり、バイナリデータ(この場合、ピクルスpythonオブジェクト)があります。送信するときに、送信したとおりに保存されることを保証する必要があります。そして、私がそれを取り戻したとき、それはまったく同じになるということです。

これにCLOBを使用することは本当に可能ですか?または、文字エンコーディングは、それだけの価値がないほど十分な問題を引き起こしますか?

39
Jason Baker

CLOBはエンコードと照合を区別しますが、BLOBは区別しません。

たとえばCL8WIN1251を使用してCLOBに書き込む場合、0xC0(キリル文字А)を書き込みます。

AL16UTF16を使用してデータを読み戻すと、0x0410が返されます。これは、この文字のUTF16表現です。

BLOBから読み取っていた場合、同じ0xC0が返されます。

55
Quassnoi

あなたの理解は正しいです。 Pythonについて言及しているので、Python 3文字列とバイトの3つの違いを考えてください:CLOBとBLOBは、CLOBのエンコードがアプリの制御下にないという追加の問題を伴います。

10
Alex Martelli