it-swarm-id.com

Perbedaan antara BYTE dan CHAR dalam tipe data kolom

Di Oracle, apa perbedaan antara:

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

dan

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

Mari kita asumsikan kumpulan karakter basis data adalah UTF-8, yang merupakan pengaturan yang direkomendasikan dalam versi terbaru Oracle. Dalam hal ini, beberapa karakter membutuhkan lebih dari 1 byte untuk disimpan dalam database.

Jika Anda mendefinisikan bidang sebagai VARCHAR2(11 BYTE), Oracle dapat menggunakan hingga 11 byte untuk penyimpanan, tetapi Anda mungkin tidak benar-benar dapat menyimpan 11 karakter di bidang, karena beberapa dari mereka memerlukan lebih dari satu byte untuk disimpan, mis. karakter non-Inggris.

Dengan mendefinisikan bidang sebagai VARCHAR2(11 CHAR) Anda memberi tahu Oracle bahwa ia dapat menggunakan ruang yang cukup untuk menyimpan 11 karakter, tidak peduli berapa banyak byte yang diperlukan untuk menyimpan masing-masing. Satu karakter mungkin memerlukan hingga 4 byte.

255
David Sykes

Satu memiliki tepat ruang untuk 11 byte, yang lain persis 11 karakter. Beberapa rangkaian karakter seperti varian Unicode dapat menggunakan lebih dari satu byte per karakter, oleh karena itu bidang 11 byte mungkin memiliki ruang kurang dari 11 karakter tergantung pada pengkodean.

Lihat juga http://www.joelonsoftware.com/articles/Unicode.html

20

Bergantung pada konfigurasi sistem, ukuran CHAR yang diukur dalam BYTES dapat bervariasi. Dalam contoh Anda:

  1. Batasi bidang hingga 11 Karakter
  2.  



16
user15453

Saya tidak yakin karena saya bukan pengguna Oracle, tetapi saya berasumsi bahwa perbedaannya terletak ketika Anda menggunakan set karakter multi-byte seperti Unicode (UTF-16/32). Dalam hal ini, 11 Bytes dapat mencapai kurang dari 11 karakter.

Juga jenis-jenis bidang tersebut mungkin diperlakukan berbeda dalam hal karakter atau huruf beraksen, misalnya 'binaryField (ete) = "été"' tidak akan cocok sementara 'charField (ete) = "été"' mungkin (sekali lagi tidak yakin tentang Oracle) .

3
Seldaek