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

Sự khác biệt giữa các ký tự N'String 'và U'String' trong Oracle

Trong câu trả lời này, tôi sẽ cố gắng cung cấp thông tin từ các nguồn chính thức

(1) Chữ N '' văn ​​bản

N'' được sử dụng để chuyển đổi một chuỗi thành NCHAR hoặc NVARCHAR2 kiểu dữ liệu

Theo tài liệu Oracle này Oracle - Literals

Cú pháp của các ký tự văn bản như sau:

ở đâu N hoặc n chỉ định chữ bằng cách sử dụng bộ ký tự quốc gia (NCHAR hoặc NVARCHAR2 dữ liệu).

Cũng trong bài viết thứ hai này Oracle - Kiểu dữ liệu

N'String' được sử dụng để chuyển đổi một chuỗi thành NCHAR kiểu dữ liệu

Từ bài viết được liệt kê ở trên:

Ví dụ sau so sánh translated_description của pm.product_descriptions bảng có chuỗi ký tự quốc gia :

SELECT translated_description FROM product_descriptions
  WHERE translated_name = N'LCD Monitor 11/PM';

(2) Chữ U

U'' được sử dụng để xử lý SQL NCHAR String Literals trong Oracle Call Interface (OCI)

Dựa trên tài liệu Oracle này Lập trình với Unicode

Giao diện cuộc gọi Oracle (OCI) là API cấp thấp nhất mà phần còn lại của các sản phẩm truy cập cơ sở dữ liệu phía máy khách sử dụng. Nó cung cấp một cách linh hoạt cho các chương trình C / C ++ để truy cập dữ liệu Unicode được lưu trữ trong SQL CHARNCHAR Loại dữ liệu. Sử dụng OCI, bạn có thể chỉ định bộ ký tự (UTF-8, UTF-16 và các bộ khác) theo chương trình để chèn hoặc truy xuất dữ liệu. Nó truy cập cơ sở dữ liệu thông qua Oracle Net.

OCI là API cấp thấp nhất để truy cập cơ sở dữ liệu, vì vậy nó mang lại hiệu suất tốt nhất có thể.

Xử lý các ký tự chuỗi NCHAR của SQL trong OCI

Bạn có thể bật nó lên bằng cách đặt biến môi trường ORA_NCHAR_LITERAL_REPLACE thành TRUE . Bạn cũng có thể đạt được hành vi này theo lập trình bằng cách sử dụng OCI_NCHAR_LITERAL_REPLACE_ONOCI_NCHAR_LITERAL_REPLACE_OFF trong OCIEnvCreate()OCIEnvNlsCreate() . Vì vậy, ví dụ:OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_ON) bật NCHAR thay thế theo nghĩa đen, trong khi OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_OFF) tắt nó đi.

[...] Lưu ý rằng, khi NCHAR thay thế chữ được bật, OCIStmtPrepareOCIStmtPrepare2 sẽ chuyển đổi N' các chữ với U' các ký tự trong văn bản SQL và lưu trữ văn bản SQL kết quả trong xử lý câu lệnh . Do đó, nếu ứng dụng sử dụng OCI_ATTR_STATEMENT để truy xuất văn bản SQL từ OCI xử lý câu lệnh, văn bản SQL sẽ trả về U' thay vì N' như được chỉ định trong văn bản gốc .

(3) Trả lời cho câu hỏi của bạn

Từ quan điểm kiểu dữ liệu, không có sự khác biệt giữa cả hai truy vấn được cung cấp



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để cấu hình DbContext để hoạt động với Oracle ODP.Net và EF CodeFirst?

  2. 2 cách để định dạng một số với Zeros hàng đầu trong Oracle

  3. Tính năng mới của Oracle 18c:Sửa đổi phân vùng trực tuyến

  4. 4 cách để tìm hàng có chứa chữ hoa trong Oracle

  5. Sự khác biệt giữa lược đồ Oracle và Microsoft là gì?