2010-10-26 37 views
5

Chúng tôi có yêu cầu lưu trữ dữ liệu char của ngôn ngữ khác nhau trong cùng một lược đồ db. Oracle 10g là DB của chúng tôi. Tôi hy vọng rằng một người đã làm điều này sẽ cho tôi hướng dẫn cụ thể hơn về cách i18n cho phép một oracle 10g db. Chúng tôi chỉ cần lưu trữ dữ liệu từ nhiều miền địa phương cũng như đối chiếu (hy vọng tất cả hỗ trợ của db lớn này) hỗ trợ ở cấp db. Chúng tôi không cần định dạng ngày, giờ, số, tiền tệ, v.v.oracle và i18n hỗ trợ

Tôi đọc một số tài liệu về hỗ trợ i18n của oracle nhưng hơi nhầm lẫn về nhiều thuộc tính nls_ * của chúng. Tôi có nên sử dụng nls_lang hoặc nls_language hoặc NLS_CHARACTERSET .....

Trả lời

6

Giả sử rằng bạn đang xây dựng cơ sở dữ liệu từ đầu, không cố gắng trang bị thêm cơ sở dữ liệu hiện có giới thiệu các vấn đề khác.

Trong cơ sở dữ liệu, bạn cần đảm bảo rằng bộ ký tự cơ sở dữ liệu hỗ trợ tất cả các ký tự bạn muốn lưu trữ. Có lẽ, điều đó có nghĩa là thiết lập NLS_CHARACTERSET của cơ sở dữ liệu thành AL32UTF8. Cá nhân, tôi cũng thích đặt NLS_LENGTH_SEMANTICS thành CHAR. Điều đó thay đổi hành vi mặc định của VARCHAR2 (n) để phân bổ n ký tự của bộ nhớ thay vì n byte. Vì AL32UTF8 là một bộ ký tự có độ dài thay đổi, sử dụng ngữ nghĩa byte thường có vấn đề bởi vì bạn phải khai báo các trường dài gấp 3 lần và kết thúc với những người dùng khác nhau có thể nhập một số ký tự khác nhau trong cùng một trường.

NLS_LANG là cài đặt ứng dụng khách. Xác định bộ ký tự mà máy khách sẽ yêu cầu dữ liệu được chuyển đổi thành. Điều đó thường phụ thuộc vào trang mã của hệ điều hành.

+0

thx để có câu trả lời rõ ràng. nghĩa là gì nếu AL32UF8. khác với UTF8 không? –

+1

AL32UTF8 là UTF8 ver. 3.1 – walla

+0

cảm ơn bạn. Bạn có thể tìm thấy thêm một chút chi tiết tại http://oracleappstechnology.blogspot.com/2007/10/difference-between-utf8-and-al32utf8.html –