Đây là những gì có thể xảy ra:
- Bộ ký tự khách hàng của bạn phải giống như CP1252 hoặc ISO-8859-15 trong khi trên thực tế, khách hàng của bạn thực sự sử dụng UTF8.
- Trong bộ ký tự này (UTF8), ký hiệu
á
chiếm hai byte, vì vậy khách hàng của bạn gửi hai byte này, đồng thời yêu cầu Oracle coi chúng là CP1252. Trong CP1252, mã hai byte cho hai ký tự dẫn đến việc DB diễn giải đầu vào là hai ký tự, do đólength('à')
bằng 2 (và nếu bạn chèn chuỗi này, kết quả của lần chèn không bằngà
) - Khi bạn đặt đúng bộ ký tự, đầu vào sẽ được oracle xử lý chính xác như một ký tự đơn và độ dài của nó là 1 (vẫn là hai byte).
Kết luận:đặt bộ ký tự ứng dụng khách của bạn đúng cách nếu không bạn sẽ gặp lỗi dịch (theo cách này, bạn sẽ không nhận được các ký tự bất hợp pháp nhưng bạn có thể nhận được các ký hiệu lạ (¿
).
Bộ ký tự cơ sở dữ liệu được đặt tại thời điểm tạo và thường được thay đổi thông qua xuất / tạo / nhập cơ sở dữ liệu trống.