11 Temmuz 2007 Çarşamba

UTF8 ve AL16UTF16 kodlamaları

Ulusal karakter seti, verileri Unicode olarak tutar; UTF8 veya AL16UTF16 kodlamalarından birini kullanarak. AL16UTF16 kodlamasında her bir karakter 2 byte yer kaplar. Bu özellik, farklı programlama dilleri karıştırıldığında, budama (truncation) hatalarının önlenmesi için string uzunluklarının belirlenmesinde kolaylık sağlar, bununla beraber çoğu ASCII karakterlerinden oluşan stringlerin depolanmasında fazladan depolama yüküne neden olur.

UTF8 kodlamasında her bir karakter 1, 2 veya 3 byte uzunluğunda yer tutar. Eğer çoğu karakter tek bir byte ile gösterilebilirse, bir değişkene veya bir tablo kolonuna daha fazla karakter sığdırılabilir; ancak veri, uzunluğu bytelarla sınrlı bir tampona aktarılırken budama (truncation) hataları oluşabilir.

Oracle şirketi, en yüksek çalışma zamanı güvenilirliği için, elverişli olan yerlerde AL16UTF16 kodlamasının kullanılamasını öneriyor. Ayrıca bir Unicode stringini tutmak için ne kadar yer gerektiğinin belirlenmesi gerekirse LENGTH fonksiyonu yerine LENGTHB fonksioyonunun kullanılması daha iyi olur.

LONG ve LONG RAW veritipleri

LONG veritipi değişken uzunluklu karakter stringlerinin depolanmasında kullanılır ve uzunluğu 32760 byte ile sınırlıdır, bunun haricinde VARCHAR2 veritipine benzer. LONG RAW veritipi ise ikili (binary) verilerin ve byte stringlerinin depolanmasında kullanılır, uzunluğu en fazla 32760 byte olabilir, LONG veritipine benzer, ondan farkı ise PL/SQL tarafından yorumlanmamasıdır.

Oracle' ın tavsiyesi LONG verilerinin CLOB' a, LONG RAW verilerinin ise BLOB' a çevrilmesidir. Bir veritabanında LONG kolonu 2**31 byte uzunluğunda olabilir, bu yüzden herhangi bir LONG değeri LONG kolonuna yerleştirilebilir.

Ancak LONG kolonundan LONG değişkenine 32760 bytetan daha büyük bir değer aktarılamaz, bu sınırlamalar LONG RAW veritipi için de aynı şekilde geçerlidir. LONG kolonları metin, karakter dizileri, hatta kısa belgeler bile depolayabilirler.

LONG kolonlarına UPDATE ve INSERT deyimlerinde ve çoğu SELECT deyiminde atıfta bulunulabilir ancak ifadelerde (expressions), fonksiyon çağrılarında ve WHERE, GROUP BY, CONNECT BY gibi SQL maddelerinde (clause) LONG kolonlarına atıfta bulunulamaz.