it-swarm-tr.com

Sütun veri tiplerinde BYTE ve CHAR arasındaki fark

Oracle'da, arasındaki fark nedir:

CREATE TABLE CLIENT
(
 NAME VARCHAR2(11 BYTE),
 ID_CLIENT NUMBER
)

ve

CREATE TABLE CLIENT
(
 NAME VARCHAR2(11 CHAR), -- or even VARCHAR2(11)
 ID_CLIENT NUMBER
)
159
Guido

Veritabanı karakter kümesinin UTF-8 olduğunu varsayalım; bu, Oracle'ın son sürümlerinde önerilen ayardır. Bu durumda, bazı karakterlerin veritabanında saklamak için 1 bayttan daha uzun sürmesi gerekir.

Alanı VARCHAR2(11 BYTE) olarak tanımlarsanız, Oracle depolama için en fazla 11 bayt kullanabilir, ancak bu alanda aslında 11 karakter saklayamayabilirsiniz; İngilizce olmayan karakterler.

Alanı VARCHAR2(11 CHAR) olarak tanımlayarak, Oracle'a, her birini depolamak için kaç byte olursa olsun, 11 karakter saklamak için yeterince yer kullanabileceğini söylersiniz. Tek bir karakter 4 bayta kadar gerektirebilir.

255
David Sykes

Birinde 11 byte, diğerinde ise tam 11 karakter var. Unicode varyantları gibi bazı karakter setleri, karakter başına birden fazla bayt kullanabilir, bu nedenle 11 bayt alan, kodlamaya bağlı olarak 11 karakterden daha az alan içerebilir.

Ayrıca bakınız http://www.joelonsoftware.com/articles/Unicode.html

20

Sistem konfigürasyonuna bağlı olarak, BYTES'de ölçülen CHAR'ın boyutu değişebilir. Örneklerinizde:

  1. Alanı 11 ile sınırlar Karakterler
  2.  



16
user15453

Oracle kullanıcısı olmadığımdan emin değilim, ancak Unicode (UTF-16/32) gibi çok baytlı karakter kümeleri kullanırken farkın yatıyor olduğunu kabul ediyorum. Bu durumda, 11 Byte, 11 karakterden az olabilir.

Ayrıca, bu alan türleri aksanlı karakterlere veya durumlara göre farklı şekilde ele alınabilir, örneğin 'binaryField (ete) = "été"' eşleşmeyecekken 'charField (ete) = "été"' olabilir (yine de Oracle'dan emin değil) .

3
Seldaek