2009-06-19 59 views
36

Đây chủ yếu chỉ là loại "kiểm tra sự hiểu biết của tôi". Dưới đây là sự hiểu biết của tôi về CLOB và BLOB khi chúng hoạt động trong Oracle:Giúp tôi hiểu sự khác biệt giữa CLOB và BLOB trong Oracle

  • CLOB dành cho văn bản như XML, JSON, v.v. Bạn không nên giả định mã hóa cơ sở dữ liệu sẽ lưu trữ dưới dạng (ít nhất là trong một ứng dụng) nó sẽ được chuyển đổi thành bất kỳ mã hóa nào mà cơ sở dữ liệu được cấu hình để sử dụng.
  • BLOB là dành cho dữ liệu nhị phân. Bạn có thể được đảm bảo hợp lý rằng chúng sẽ được lưu trữ như thế nào bạn gửi cho họ và bạn sẽ nhận được chúng trở lại với chính xác cùng một dữ liệu như chúng được gửi như.

Nói cách khác, nói rằng tôi có một số dữ liệu nhị phân (trong trường hợp này là đối tượng python ngâm). Tôi cần phải chắc chắn rằng khi tôi gửi nó, nó sẽ được lưu trữ chính xác như thế nào tôi đã gửi nó và rằng khi tôi nhận được nó trở lại nó sẽ được chính xác như nhau. BLOB là điều tôi muốn, đúng không?

Có thực sự khả thi khi sử dụng CLOB cho việc này không? Hay mã hóa ký tự sẽ gây ra đủ vấn đề mà nó không đáng?

+0

Bạn không nên thử và thứ hai đoán cơ sở dữ liệu sẽ lưu trữ một trong hai điều này như thế nào trừ khi bạn đang phát triển các tiện ích của bên thứ ba. Chỉ những hướng dẫn định cỡ mới đáng tin cậy. – mckenzm

Trả lời

50

CLOB mã hóa và đối chiếu nhạy cảm, BLOB thì không.

Khi bạn viết thành CLOB sử dụng, giả sử, CL8WIN1251, bạn viết 0xC0 (là chữ cái Kirin).

Khi bạn đọc lại dữ liệu bằng cách sử dụng AL16UTF16, bạn sẽ quay lại 0x0410, đây là số UTF16 represenation của thư này.

Nếu bạn đang đọc từ số BLOB, bạn sẽ nhận được cùng một số 0xC0 quay lại.

9

Hiểu biết của bạn là chính xác. Vì bạn đề cập đến Python, hãy nghĩ đến sự khác biệt của Python 3 giữa các chuỗi và byte: CLOB và BLOB tương tự nhau, với vấn đề thêm rằng việc mã hóa các CLOB không nằm dưới sự kiểm soát của ứng dụng của bạn.

Các vấn đề liên quan