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ặcn
chỉ định chữ bằng cách sử dụng bộ ký tự quốc gia (NCHAR
hoặcNVARCHAR2
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ủapm.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
CHAR
vàNCHAR
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ànhTRUE
. Bạn cũng có thể đạt được hành vi này theo lập trình bằng cách sử dụngOCI_NCHAR_LITERAL_REPLACE_ON
vàOCI_NCHAR_LITERAL_REPLACE_OFF
trongOCIEnvCreate()
vàOCIEnvNlsCreate()
. Vì vậy, ví dụ:OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_ON)
bậtNCHAR
thay thế theo nghĩa đen, trong khiOCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_OFF)
tắt nó đi.[...] Lưu ý rằng, khi
NCHAR
thay thế chữ được bật,OCIStmtPrepare
vàOCIStmtPrepare2
sẽ chuyển đổiN'
các chữ vớiU'
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ụngOCI_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