sql >> Database >  >> RDS >> Oracle

Querykolom met char-gegevenstype in oracle

Het probleem is of je char . gebruikt of varchar2 vergelijkingssemantiek in uw zoekopdrachten. Als je een hardgecodeerde letterlijke tekenreeks of een char(10) . hebt variabele, Oracle gebruikt de char vergelijkingssemantiek die de volgende witruimte moet negeren. Als je een varchar2(10) . hebt variabele, Oracle gebruikt de varchar2 vergelijkingssemantiek die de volgende witruimte omvat. Dus

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

zal een rij retourneren als v_aa is gedefinieerd als een char(10) (of als het wordt vervangen door een letterlijke tekenreeks) maar niet als het is gedefinieerd als een varchar(10) .

Dit is een van de (vele) redenen waarom de meeste mensen char vermijden gegevenstypen volledig. Persoonlijk vind ik het af en toe een char niet erg voor data met echt vaste breedte (d.w.z. char(1) voor vlaggen en char(2) voor staatscodes), hoewel het geen voordeel heeft om char . te gebruiken via varchar2 in die scenario's. Voor alles dat geen vaste breedte heeft, gebruikt u echter een char slaat nergens op. Je dwingt Oracle alleen maar meer ruimte in te nemen dan nodig is en je creëert meer werk voor jezelf met twee sets stringvergelijkingssemantiek (onder andere).



  1. PHP PDO Postgres versus Sqlite kolomtype voor count(*)

  2. Kan oracle.ucp.jdbc.PoolDataSourceFactory niet vinden in Oracle ucp

  3. Laravel Welsprekende groep volgens meest recente record

  4. selecteer query voor categoriegegevens met bovenliggende kindrelatie