2009-06-19 11 views
36

Questo è principalmente un tipo di domanda "verifica la mia comprensione". Ecco la mia comprensione della CLOB e BLOB che lavorano in Oracle:Aiutami a capire la differenza tra CLOB e BLOB in Oracle

  • CLOB sono per il testo come XML, JSON, ecc Si consiglia di non assumere quello che codifica per il database memorizzerà come (almeno in un'applicazione) come sarà convertito in qualsiasi codifica che il database è stato configurato per l'uso.
  • I BLOB sono per dati binari. Puoi essere ragionevolmente assicurato che verranno memorizzati come li mandi e che li riprenderai con gli stessi dati esattamente come sono stati inviati.

Quindi in altre parole, dire che ho alcuni dati binari (in questo caso un oggetto python decapato). Devo essere certo che quando lo invierò, verrà memorizzato esattamente come l'ho inviato e che quando lo avrò riavviato sarà esattamente lo stesso. Un BLOB è quello che voglio, correggere?

È davvero possibile utilizzare un CLOB per questo? O la codifica dei caratteri causerà abbastanza problemi che non ne vale la pena?

+0

Non si dovrebbe provare a indovinare come il database memorizzerà uno di questi a meno che non si stiano sviluppando programmi di utilità di terze parti. Dovrebbero essere considerate solo le linee guida per il dimensionamento. – mckenzm

risposta

50

CLOB è sensibile alla codifica e alla collazione, non lo è BLOB.

Quando si scrive in un CLOB utilizzando, ad esempio, CL8WIN1251, si scrive un 0xC0 (che è la lettera cirillica А).

Quando si leggono i dati utilizzando AL16UTF16, si ottiene 0x0410, che è una rappresentazione UTF16 di questa lettera.

Se si stava leggendo da un BLOB, si otterrebbe lo stesso 0xC0 indietro.

9

La tua comprensione è corretta. Dato che parli di Python, pensa alla distinzione di Python 3 tra stringhe e byte: CLOB e BLOB sono piuttosto analoghi, con il problema in più che la codifica di CLOB non è sotto il controllo della tua app.