Nó hoạt động vì cả hai điều kiện sau đều đúng:
- Bộ ký tự ứng dụng khách bằng với bộ ký tự cơ sở dữ liệu của bạn.
- Bộ ký tự cho phép bất kỳ giá trị byte nào
Bộ ký tự cơ sở dữ liệu của bạn và bộ ký tự máy khách của bạn được đặt thành US7ASCII
. Trong trường hợp như vậy, từng dữ liệu được ghi / đọc từng cái một mà không có bất kỳ chuyển đổi nào, tức là các byte bạn gửi được ghi chính xác vào cơ sở dữ liệu. Có thể bạn chưa đặt NLS_LANG
ở phía máy khách của bạn nhưng Oracle mặc định nó thành AMERICAN_AMERICA.US7ASCII
.
US7ASCII
là một mã hóa 7-bit. Tôi giả sử một ứng dụng ASCII thuần túy (có thể khá khó tìm) sẽ chỉ bỏ qua bit thứ 8 được lưu trữ trong kiến trúc 8 Bit. Các bộ ký tự khác, ví dụ:AL32UTF8
không cho phép mỗi giá trị byte. Trong trường hợp này, các ký tự như vậy sẽ được thay thế bằng trình giữ chỗ, ví dụ:¿
hoặc ?
.
Lưu ý, bạn đặt bộ ký tự ứng dụng khách của mình thành US7ASCII
mà rất có thể là không đúng. Đặt nó đúng thành bộ ký tự được ứng dụng của bạn sử dụng, sau đó đặt °
sẽ được thay thế.
Trong trường hợp bạn sử dụng SQL * Plus, hãy kiểm tra mã bảng điều khiển bằng lệnh chcp
, tương ứng. locale charmap
. Đặt NLS_LANG
của bạn biến môi trường phù hợp trước khi bạn bắt đầu sqlplus.