Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cột truy vấn với kiểu dữ liệu char trong oracle

Vấn đề nằm ở việc bạn có sử dụng char hay không hoặc varchar2 ngữ nghĩa so sánh trong các truy vấn của bạn. Nếu bạn có một chuỗi được mã hóa cứng là ký tự hoặc char(10) biến, Oracle sử dụng char ngữ nghĩa so sánh là bỏ qua khoảng trắng ở cuối. Nếu bạn có varchar2(10) biến, Oracle sử dụng varchar2 ngữ nghĩa so sánh bao gồm khoảng trắng ở cuối. Như vậy

 select aa 
   into v_temp 
   from abc 
  where aa in (v_aa);

sẽ trả về một hàng nếu v_aa được định nghĩa là một char(10) (hoặc nếu nó được thay thế bằng một chuỗi ký tự) nhưng không phải nếu nó được định nghĩa là varchar(10) .

Đây là một trong (nhiều) lý do mà hầu hết mọi người tránh char các kiểu dữ liệu hoàn toàn. Cá nhân tôi không bận tâm về char không thường xuyên cho dữ liệu có độ rộng cố định thực sự (tức là char(1) cho cờ và char(2) đối với mã tiểu bang) mặc dù không có lợi khi sử dụng char qua varchar2 trong các tình huống đó. Tuy nhiên, đối với bất kỳ thứ gì không có chiều rộng cố định, sử dụng char không có ý nghĩa. Bạn chỉ đang buộc Oracle sử dụng nhiều dung lượng hơn mức cần thiết và tạo ra nhiều công việc hơn cho chính bạn để giải quyết hai bộ ngữ nghĩa so sánh chuỗi (trong số các vấn đề khác).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thực thi tập lệnh sql Oracle thông qua mã java

  2. Làm cách nào để hiển thị dữ liệu dạng bảng với Thủ tục được lưu trữ trong Java?

  3. Sử dụng IW và MM trong Oracle

  4. Ngoại lệ NO_DATA_FOUND không được ném khi được sử dụng trong CHỌN VÀO

  5. Một thủ tục được lưu trữ Oracle chấp nhận tham số mảng (bảng) trong ví dụ gói cần thiết