Yanıtlar:
Veritabanı karakter kümesinin, Oracle'ın son sürümlerinde önerilen ayar olan UTF-8 olduğunu varsayalım. Bu durumda, bazı karakterlerin veritabanında saklanması 1 bayttan fazla zaman alır.
Alanı olarak tanımlarsanız VARCHAR2(11 BYTE)
, Oracle depolama için en fazla 11 bayt kullanabilir, ancak bazılarında alanda 11 karakter depolayamayabilirsiniz, çünkü bazılarının saklanması birden fazla bayt alır, örneğin İngilizce olmayan karakterler.
VARCHAR2(11 CHAR)
Oracle'a söylediğiniz gibi alanı tanımlayarak, her birini saklamak için kaç bayt olursa olsun 11 karakteri saklamak için yeterli alan kullanabilir. Tek bir karakter 4 bayta kadar gerektirebilir.
Birinde 11 bayt için tam alan, diğerinde ise tam 11 karakter bulunur. Unicode varyantları gibi bazı karakter kümelerinde karakter başına birden fazla bayt kullanılabilir, bu nedenle 11 bayt alanda kodlamaya bağlı olarak 11 karakterden daha az alan olabilir.
Ayrıca bkz. Http://www.joelonsoftware.com/articles/Unicode.html
Bir Oracle kullanıcısı olmadığımdan emin değilim, ancak Unicode (UTF-16/32) gibi çok baytlı karakter kümelerini kullandığınızda farkın yattığını varsayıyorum. Bu durumda, 11 Bayt 11 karakterden daha azını oluşturabilir.
Ayrıca, bu alan türleri aksanlı karakterler veya büyük / küçük harfe göre farklı şekilde ele alınabilir, örneğin 'binaryField (ete) = "été"' eşleşmezken 'charField (ete) = "été"' (yine Oracle hakkında emin değilim) .
VARCHAR2
. BirVARCHAR2(4000 CHAR)
karakterin tanımlanması, bazı karakterler birden fazla bayt depolama alanı gerektiriyorsa 4000 karakterden daha azına izin verir.