Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Pengkodean set karakter dan faktor ukuran penyimpanan

Kecuali Anda hanya tertarik pada perubahan maksimum, contoh Anda tidak benar.

AL32UTF8 adalah set karakter dengan panjang variabel. Berbicara secara umum, karakter apa pun yang ada dalam rangkaian karakter US7ASCII akan membutuhkan 1 byte, karakter Eropa umumnya membutuhkan 2 byte, berbagai karakter bahasa Asia membutuhkan 3 byte, dan beberapa karakter yang sangat langka akan membutuhkan 4 byte. Secara realistis, jika Anda berbicara tentang mengonversi data WE8ISO8859P1 yang sebenarnya ke AL32UTF8, Anda biasanya akan melihat dalam praktiknya faktor konversi antara 1 dan 2 yang jauh lebih dekat ke 1 daripada ke 2. Tanpa melihat pemetaan Unicode untuk setiap karakter WE8ISO8859P1 yang valid , Saya akan terkejut jika ada penyimpanan 3 atau 4 byte yang diperlukan dalam set karakter AL32UTF8.

Dalam Panduan Dukungan Globalisasi, ada bagian di kumpulan karakter yang memberi tahu Anda set karakter mana yang byte tunggal, mana yang multi-byte, dan set karakter multi-byte mana yang lebarnya tetap. Hampir semua set karakter multi-byte adalah lebar variabel sehingga faktor yang Anda cari akan bergantung pada data Anda.

Dalam kebanyakan kasus, Anda lebih baik mendeklarasikan kolom Anda untuk menggunakan semantik panjang karakter daripada semantik panjang byte, membiarkan database mencari tahu di balik layar berapa banyak data yang akan dialokasikan. Misalnya, jika Anda mendeklarasikan kolom

CREATE TABLE foo (
  col1 VARCHAR2(10 CHAR)
)

Oracle akan mengalokasikan ruang untuk 10 karakter penyimpanan terlepas dari kumpulan karakter database dan berapa pun jumlah byte aktual yang diperlukan untuk menyimpan data tersebut (tunduk pada batas 4000 byte per VARCHAR2 kolom). Itu umumnya membuat penentuan ukuran kolom menjadi lebih mudah karena Anda tidak perlu memperbesar kolom jika seseorang memutuskan untuk membuang 10 karakter UTF-8 4-byte ke dalam satu baris dan Anda tidak perlu menjelaskan kepada pengguna bahwa kolom akan menerima string dengan jumlah karakter yang berbeda tergantung pada bahasa dan/atau karakter tertentu yang dipilih.

Meskipun orang-orang Oracle yang berurusan dengan globalisasi secara teratur mencegahnya , lebih suka Anda secara eksplisit menentukan semantik panjang karakter saat Anda mendeklarasikan kolom Anda atau setidaknya hanya mengaturnya pada tingkat sesi, Anda dapat mengatur NLS_LENGTH_SEMANTICS parameter inisialisasi menyebabkan VARCHAR2(10) untuk menggunakan semantik panjang karakter daripada semantik panjang byte secara default (Anda masih dapat menentukan VARCHAR2(10 BYTE) jika Anda menginginkan semantik dengan panjang byte).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengubah nomor (7,2) menjadi varchar di Oracle?

  2. Apa sebenarnya yang dilakukan tanda kutip di sekitar nama tabel?

  3. Butuh bantuan untuk mendorong nilai kolom 8k dari R ke kolom CLOB (Oracle)

  4. Cara mereferensikan kunci utama komposit dalam SQL

  5. Menggunakan pernyataan WITH dan UPDATE dalam kueri SQL yang sama