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

Chiều dài thực của một chuỗi, như Oracle đã thấy

Bạn có thể, như những người khác đã trình bày, chuyển đổi chuỗi Java thành một mảng byte bằng cách sử dụng bộ ký tự của cơ sở dữ liệu Oracle và sau đó lấy độ dài tính bằng byte từ đó. Tuy nhiên, điều đó phụ thuộc vào việc biết bộ ký tự của cơ sở dữ liệu của bạn là gì - các cơ sở dữ liệu khác nhau sẽ có các bộ ký tự khác nhau, dẫn đến độ dài byte khác nhau cho cùng một chuỗi trong các bộ ký tự khác nhau.

Giả sử rằng cơ sở dữ liệu của bạn đang sử dụng bộ ký tự có độ rộng thay đổi như UTF-8 (NLS_CHARACTERSET của AL32UTF8), bạn cũng có thể khai báo các cột trong Oracle dựa trên độ dài ký tự thay vì độ dài byte. Điều đó có thể đơn giản hóa mã của bạn vì bạn chỉ có thể kiểm tra độ dài ký tự trong chuỗi của mình. Nó cũng đơn giản hóa giao tiếp cho người dùng. Nói chung, người dùng khó hiểu tại sao một trường đôi khi có thể lưu trữ 5 ký tự trong khi những trường hợp khác lại từ chối một chuỗi 2 ký tự tùy thuộc vào các ký tự là một phần của chuỗi (1 ký tự trong bộ ký tự UTF-8 có thể yêu cầu tối đa 3 byte lưu trữ).

Theo mặc định, khi bạn khai báo một cột

CREATE TABLE foo (
  col_name VARCHAR2(5)
);

điều đó cho phép Oracle cho phép tối đa 5 byte dữ liệu. Tuy nhiên, nếu bạn muốn cho phép 5 ký tự dữ liệu bất kể số byte, bạn có thể sử dụng ngữ nghĩa độ dài ký tự

CREATE TABLE foo (
  col_name VARCHAR2(5 CHAR)
);

Giả sử bạn muốn thực hiện việc này cho tất cả các bảng của mình trong khi chạy DDL, bạn cũng có thể đặt nls_length_semantics ở cấp độ phiên trước khi chạy DDL của bạn

ALTER SESSION SET nls_length_semantics = CHAR;

CREATE TABLE foo (
  col_name VARCHAR2(5)
);

tạo một bảng với một cột cho phép tối đa 5 ký tự dữ liệu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tên Ràng buộc Mặc định trong Oracle là gì?

  2. Thêm tên giản đồ vào thực thể trong dữ liệu Spring?

  3. Lỗi khi chuyển đổi XML từ cột CLOB sang cột XMLType

  4. Phương ngữ ngủ đông cho Cơ sở dữ liệu Oracle 11g?

  5. Oracle cách xuất truy vấn sang tệp văn bản / csv