39 votes

Aidez-moi à comprendre la différence entre les CLOB et les BLOB dans Oracle

Il s'agit principalement d'une question du type "vérifiez ma compréhension". Voici ce que je comprends des CLOB et BLOB tels qu'ils fonctionnent dans Oracle :

  • Les CLOB sont destinés aux textes tels que XML, JSON, etc. Vous ne devez pas présumer de l'encodage dans lequel la base de données le stockera (du moins dans une application), car il sera converti dans l'encodage que la base de données a été configurée pour utiliser.
  • Les BLOB sont destinés aux données binaires. Vous pouvez être raisonnablement assuré qu'ils seront stockés de la manière dont vous les envoyez et que vous les recevrez en retour avec exactement les mêmes données que celles qu'ils ont envoyées.

En d'autres termes, disons que j'ai des données binaires (dans ce cas, un objet python décapé). J'ai besoin d'être assuré que lorsque je l'envoie, il sera stocké exactement comme je l'ai envoyé et que lorsque je le récupère, il sera exactement le même. Un BLOB est ce que je veux, n'est-ce pas ?

Est-il vraiment possible d'utiliser un CLOB pour cela ? Ou l'encodage des caractères posera-t-il suffisamment de problèmes pour que cela n'en vaille pas la peine ?

55voto

Quassnoi Points 191041

CLOB est sensible à l'encodage et à la collation, BLOB ne l'est pas.

Lorsque vous écrivez dans un CLOB en utilisant, disons, CL8WIN1251 vous écrivez un 0xC0 (lettre cyrillique А).

Lorsque vous relisez des données à l'aide de AL16UTF16 vous récupérez 0x0410 qui est un UTF16 représentation de cette lettre.

Si vous lisiez un BLOB vous obtiendrez la même chose 0xC0 retour.

10voto

Alex Martelli Points 330805

Votre compréhension est correcte. Puisque vous mentionnez Python, pensez à la distinction faite par Python 3 entre les chaînes et les octets : Les CLOB et les BLOB sont assez analogues, avec le problème supplémentaire que l'encodage des CLOB n'est pas sous le contrôle de votre application.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X