mac instant cx_oracle conectar con 12c 10g python oracle

python - instant - Ayúdame a entender la diferencia entre CLOB y BLOB en Oracle



python import cx_oracle (2)

Su comprensión es correcta. Como mencionas Python, piensa en la distinción de Python 3 entre cadenas y bytes: los CLOB y los BLOB son bastante análogos, con el problema adicional de que la codificación de los CLOB no está bajo el control de tu aplicación.

Esto es principalmente una pregunta tipo "verifica mi comprensión". Aquí está mi comprensión de CLOB y BLOB mientras trabajan en Oracle:

  • Los CLOB son para texto como XML, JSON, etc. No debe suponer qué codificación va a almacenar la base de datos (al menos en una aplicación), ya que se convertirá a la codificación que la base de datos estaba configurada para usar.
  • BLOB son para datos binarios. Puede estar razonablemente seguro de que se almacenarán cómo los envía y que los recuperará con exactamente los mismos datos a medida que se enviaron.

Entonces, en otras palabras, digamos que tengo algunos datos binarios (en este caso, un objeto python en escabeche). Necesito estar seguro de que cuando lo envíe, se almacenará exactamente como lo envié y que cuando lo recupere será exactamente igual. Un BLOB es lo que quiero, ¿correcto?

¿Es realmente factible usar un CLOB para esto? ¿O la codificación de caracteres causará problemas suficientes como para que no valga la pena?


CLOB es sensible a la codificación y la intercalación, BLOB no.

Cuando escribe en un CLOB usando, digamos, CL8WIN1251 , escribe un 0xC0 (que es una letra cirílica А).

Cuando vuelves a leer datos usando AL16UTF16 , obtienes 0x0410 , que es una representación UTF16 de esta carta.

Si estabas leyendo desde un BLOB , obtendrías el mismo 0xC0 .