2012-03-09 36 views
7

Tôi có Oracle SQL Developer (3.1.07) và tôi đang cố gắng để làm việc với một cơ sở dữ liệu có sử dụng mã hóa WE8ISO8859P1:Oracle SQL môi trường phát triển mã hóa

SELECT * FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET'; 

tôi có vấn đề với các gói tiết kiệm có chứa ký tự unicode . Khi tôi mở gói đã lưu trước đó, tất cả các ký hiệu unicode được chuyển thành '¿'.

Tôi phải thay đổi cài đặt nào để làm cho Nhà phát triển SQL giữ những biểu tượng đó? Tôi đã cố gắng đặt mã hóa môi trường thành 'ISO-8859-15' và một số mã hóa khác, nhưng nó sẽ không giúp ích gì.

Trả lời

0

Ít nhất để mở PKG trong phát triển sql, bạn có thể làm một thử nhanh và xem nếu nó hoạt động: -

Thay đổi mã hóa nhà phát triển SQL 'thành' unicode-utf-8 'mặc định thành phiên bản mới hơn ngay bây giờ.

Cuối cùng, bạn cần di chuyển bộ ký tự cơ sở dữ liệu sang 'AL32UTF8' để tránh các vấn đề khác (như dữ liệu) do bộ char này.

0

Nếu bạn xem USER_SOURCE, bạn sẽ thấy mã nguồn, như được lưu trữ/giải thích bởi cơ sở dữ liệu, sẽ nằm trong cột VARCHAR2 để sử dụng bộ ký tự cơ sở dữ liệu. Như vậy, mã nguồn của bạn sẽ cần phải có trong WE8ISO8859P1. Về lý thuyết, nếu khách hàng và cơ sở dữ liệu đang sử dụng cùng một bộ ký tự, thì cơ sở dữ liệu sẽ không cố gắng dịch bất kỳ ký tự nào và bạn có thể lẻn theo chuỗi byte mà cơ sở dữ liệu nghĩ là WE8ISO8859P1. nhưng sẽ có ý nghĩa trong unicode. Tuy nhiên, tại một số thời điểm, ai đó sẽ sử dụng sai ứng dụng và nó sẽ bị hỏng.

Bạn không cần mã unicode cho số nhận dạng, v.v ... trong mã, vì vậy tôi giả sử nó nằm trong chuỗi ký tự. Bạn nên lưu trữ chúng trong một bảng (cột NVARCHAR2) và chọn chúng vào mã thay vì mã hóa chúng. Nếu điều đó là không thể, bạn có thể sử dụng UNISTR và mã hóa cứng các giá trị hex có liên quan.

1

Nếu cơ sở dữ liệu mã hóa văn bản thành mã hóa một byte không unicode (ví dụ: ISO-8859), bất kỳ biểu tượng nào không có trên bảng ký tự sẽ bị coi là không hợp lệ và được thay thế bằng trình giữ chỗ. Bạn không thể quay trở lại từ đó, thông tin bị mất.

Điều đó có thể thường làm việc xung quanh khi lưu trữ dữ liệu, nhưng đối với mã nguồn, bạn không thể kiểm soát cách Oracle mã hóa chuỗi của bạn.

Nếu cơ sở dữ liệu của bạn được định cấu hình để sử dụng lược đồ mã hóa đó, bạn có thể không phải viết mã vi phạm các quy tắc của nó.

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