sql >> Database teknologi >  >> RDS >> Oracle

Forespørgselskolonne med char-datatype i oracle

Problemet kommer ned til, om du bruger char eller varchar2 sammenligningssemantik i dine forespørgsler. Hvis du har en hårdkodet streng literal eller en char(10) variabel, Oracle bruger char sammenligningssemantik, som skal ignorere det efterfølgende hvide rum. Hvis du har en varchar2(10) variabel, Oracle bruger varchar2 sammenligningssemantik, som inkluderer det efterfølgende hvide mellemrum. Således

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

returnerer en række hvis v_aa er defineret som en char(10) (eller hvis det er erstattet med en streng literal), men ikke hvis det er defineret som en varchar(10) .

Dette er en af ​​de (mange) grunde til, at de fleste mennesker undgår char datatyper helt. Personligt har jeg ikke noget imod den lejlighedsvise char for data med virkelig fast bredde (dvs. char(1) for flag og char(2) for statskoder), selvom der ikke er nogen fordel ved at bruge char over varchar2 i de scenarier. For alt, der ikke er fast bredde, dog ved at bruge en char giver ingen mening. Du tvinger bare Oracle til at forbruge mere plads, end det behøver, og skaber mere arbejde til dig selv ved at håndtere to sæt strengsammenligningssemantik (blandt andre problemer).



  1. Taling About SQL Server Performance Flaskehalse

  2. Timeout for PostgreSQL-forbindelse Operational Error på Django og ny server

  3. Google kortlægger kontinuerlig x-akse fra php-array

  4. MySQL Få Time of Old Record Insert?