2010-01-04 66 views
13

Tôi không thể tìm ra cú pháp mã hóa của Oracle cho cuộc sống của tôi. Đây là Oracle 10gTrong oracle, làm thế nào để thay đổi phiên của tôi để hiển thị UTF8?

Phiên NLS_LANGUAGE của tôi hiện đang được mặc định là AMERICAN. Tôi cần có khả năng hiển thị các ký tự UTF8.

Dưới đây là một số trong những nỗ lực của tôi, tất cả không chính xác:

ALTER SESSION SET NLS_LANGUAGE='UTF8' 
ALTER SESSION SET NLS_LANGUAGE='AMERICAN_AMERICA.UTF8' 

lệnh bí mật là gì?

+0

Cơ sở dữ liệu của bạn có được cấu hình để giữ UTF8 không? Cài đặt NLS_LANG cơ sở dữ liệu là gì? –

+1

Có, được định cấu hình để giữ UTF8. –

Trả lời

13

Tập ký tự là một phần của ngôn ngữ, được xác định bởi giá trị NLS_LANG. Như the documentation makes clear đây là một hệ điều hành biến:

NLS_LANG được thiết lập như là một biến môi trường trên nền tảng UNIX. NLS_LANG được đặt trong sổ đăng ký trên nền tảng Windows .

Bây giờ chúng tôi có thể sử dụng ALTER SESSION để thay đổi giá trị cho một vài phần tử miền địa phương, NLS_LANGUAGE và NLS_TERRITORY. Nhưng không, than ôi, bộ ký tự. Lý do cho sự khác biệt này là - tôi nghĩ rằng ngôn ngữ và lãnh thổ chỉ đơn giản là ảnh hưởng đến cách Oracle diễn giải dữ liệu được lưu trữ, ví dụ: có hiển thị dấu phẩy hoặc dấu chấm khi hiển thị số lớn hay không. Wheareas bộ ký tự là có liên quan với cách ứng dụng máy khách hiển thị dữ liệu được hiển thị. Thông tin này được ứng dụng khách tải lên vào lúc khởi động và không thể thay đổi từ bên trong.

+6

Sự hiểu biết của tôi về WHY là khác nhau. Bộ ký tự của máy khách phải được xác định trước khi kết nối mạng sql * vào cơ sở dữ liệu được tạo để có thể sử dụng các bản dịch bộ ký tự chính xác. –

9

Được rồi, mỗi http://www.oracle.com/technology/tech/globalization/htdocs/nls_lang%20faq.htm:

NLS_LANG không thể thay đổi bằng cách ALTER PHIÊN, NLS_LANGUAGE và NLS_TERRITORY lon. Tuy nhiên, không thể đặt NLS_LANGUAGE và/hoặc NLS_TERRITORY làm thông số "độc lập" trong môi trường hoặc sổ đăng ký trên máy khách.

Rõ ràng "quyền" Giải pháp là, trước khi đăng nhập vào Oracle ở tất cả, thiết lập các biến môi trường sau đây:

export NLS_LANG=AMERICAN_AMERICA.UTF8 

Oracle được một F mỡ lớn cho khả năng sử dụng.

+0

UTF8 có phải là lựa chọn đúng cho các cửa sổ không? Tài liệu chỉ ra rằng AL32UTF8 thay thế nó và rằng không có máy khách windows UTF-8: "... UTF8 đã bị thay thế bởi AL32UTF8. Không sử dụng UTF8 cho dữ liệu XML." [1] (http://docs.oracle.com/cd/B28359_01/install.111/b32006/gblsupp.htm#BABDHCGD) "nếu bộ ký tự cơ sở dữ liệu là AL32UTF8 và máy khách đang chạy trên hệ điều hành Windows, thì bạn không nên đặt AL32UTF8 làm ký tự máy khách được đặt trong tham số NLS_LANG vì không có máy khách UT32-WIN32 nào. " [2] (http://docs.oracle.com/cd/B28359_01/server.111/b28298/ch3globenv.htm#i1006330) –

2

Do đó, trước khi bắt đầu '$ sqlplus' trên OS, chạy các nội dung sau:

  • Trên Windows

    bộ NLS_LANG = AMERICAN_AMERICA.UTF8

  • Trên Unix (Solaris và Linux, centos vv)

    xuất NLS_LANG = AMERICAN_AMERICA.UTF8

Bạn cũng nên đặt biến env trong '.bash_profile '[trên tập lệnh khởi động]

Đây là nơi mà các biến ORACLE env khác (ORACLE_SID, ORACLE_HOME) thường được đặt.

chỉ fyi - Nhà phát triển SQL hiển thị/xử lý các ký tự UTF8 không phải tiếng Anh tốt.

Các vấn đề liên quan