Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Mã hóa bộ ký tự và các yếu tố kích thước lưu trữ

Trừ khi bạn chỉ quan tâm đến sự thay đổi tối đa, ví dụ của bạn không đúng.

AL32UTF8 là một bộ ký tự có độ dài thay đổi. Nói một cách tổng quát, bất kỳ ký tự nào trong bộ ký tự US7ASCII sẽ chiếm 1 byte, các ký tự châu Âu thường yêu cầu 2 byte, các ký tự ngôn ngữ châu Á khác nhau yêu cầu 3 byte và một số ký tự rất hiếm sẽ yêu cầu 4 byte. Thực tế, nếu bạn đang nói về việc chuyển đổi dữ liệu WE8ISO8859P1 thực tế thành AL32UTF8, bạn sẽ thấy trên thực tế hệ số chuyển đổi giữa 1 và 2 gần hơn nhiều với 1 hơn là 2. Mà không cần tra cứu ánh xạ Unicode cho mọi ký tự WE8ISO8859P1 hợp lệ , Tôi sẽ rất ngạc nhiên nếu có bất kỳ bộ nhớ 3 hoặc 4 byte nào được yêu cầu trong bộ ký tự AL32UTF8.

Trong Hướng dẫn hỗ trợ toàn cầu hóa, có một phần về bộ ký tự cho bạn biết bộ ký tự nào là byte đơn, bộ ký tự nào là nhiều byte và bộ ký tự nào trong số các bộ ký tự nhiều byte có chiều rộng cố định. Hầu hết tất cả các bộ ký tự nhiều byte đều có chiều rộng thay đổi, vì vậy yếu tố bạn đang tìm kiếm sẽ phụ thuộc vào dữ liệu của bạn.

Trong hầu hết các trường hợp, bạn nên khai báo các cột của mình để sử dụng ngữ nghĩa độ dài ký tự thay vì ngữ nghĩa độ dài byte, để cơ sở dữ liệu tìm ra đằng sau lượng dữ liệu cần phân bổ. Ví dụ:nếu bạn khai báo một cột

CREATE TABLE foo (
  col1 VARCHAR2(10 CHAR)
)

Oracle sẽ phân bổ không gian cho 10 ký tự lưu trữ bất kể bộ ký tự cơ sở dữ liệu và bất kể số byte thực tế cần thiết để lưu trữ dữ liệu đó (tuân theo giới hạn 4000 byte cho mỗi VARCHAR2 cột). Điều đó nói chung làm cho việc xác định kích thước cột dễ dàng hơn nhiều vì bạn không phải vượt quá kích thước các cột trong trường hợp ai đó quyết định ném 10 ký tự 4 byte UTF-8 vào một hàng và bạn không phải giải thích cho người dùng rằng cột sẽ chấp nhận chuỗi có số lượng ký tự khác nhau tùy thuộc vào ngôn ngữ và / hoặc các ký tự cụ thể được chọn.

Mặc dù những người Oracle thường xuyên đối phó với toàn cầu hóa không khuyến khích nó , nếu bạn chỉ định rõ ràng ngữ nghĩa độ dài ký tự khi khai báo các cột của mình hoặc ít nhất chỉ đặt nó ở cấp phiên, bạn có thể đặt NLS_LENGTH_SEMANTICS tham số khởi tạo để gây ra VARCHAR2(10) để sử dụng ngữ nghĩa độ dài ký tự thay vì ngữ nghĩa độ dài byte theo mặc định (bạn vẫn có thể chỉ định VARCHAR2(10 BYTE) nếu bạn muốn ngữ nghĩa độ dài 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. Dữ liệu từ oracle trong utf-8 với php

  2. Trả về N cột từ một hàm bảng

  3. Hàm LENGTH () trong Oracle

  4. Các tác động về hiệu suất của Mệnh đề Oracle IN không có phép nối là gì?

  5. cách chuyển kết nối do người dùng tạo sang chế độ ngủ đông