sql >> Database teknologi >  >> RDS >> Sqlserver

ANSI_NULLS og QUOTED_IDENTIFIER dræbte ting. Hvad er de til?

OK, set fra en applikationsudviklers synspunkt, er det her, hvad disse indstillinger gør:

QUOTED_IDENTIFIER

Denne indstilling styrer, hvordan anførselstegn ".." fortolkes af SQL-kompileren. Når QUOTED_IDENTIFIER er ON, behandles anførselstegn som parenteser ([...] ) og kan bruges til at citere SQL-objektnavne som tabelnavne, kolonnenavne osv. Når den er FRA (anbefales ikke), behandles anførselstegn som apostrof ('..' ) og kan bruges til at citere tekststrenge i SQL-kommandoer.

ANSI_NULLS

Denne indstilling styrer, hvad der sker, når du forsøger at bruge en anden sammenligningsoperator end IS på NULL. Når den er TIL, følger disse sammenligninger standarden, som siger, at sammenligning med NULL altid mislykkes (fordi det ikke er en værdi, det er et flag) og returnerer FALSE . Når denne indstilling er FRA (virkelig ikke anbefales) kan du behandle det som en værdi og bruge = , <> osv. på det og få SAND tilbage efter behov.

Den rigtige måde at håndtere dette på er i stedet at bruge IS (ColumnValue IS NULL .. ).

CONCAT_NULL_YIELDS_NULL

Denne indstilling kontrollerer, om NULL'er "propogerer", når de bruges i strengudtryk. Når denne indstilling er TIL, følger den standarden og et udtryk som 'en eller anden streng' + NULL .. returnerer altid NULL. I en serie af strengsammenkædninger kan én NULL således få hele udtrykket til at returnere NULL. Hvis du slår denne FRA (også, ikke anbefalet) vil NULL'erne blive behandlet som tomme strenge i stedet, så 'en eller anden streng' + NULL evalueres bare til 'en eller anden streng' .

Den korrekte måde at håndtere dette på er med funktionen COALESCE (eller ISNULL):'en eller anden streng' + COALESCE(NULL, '') .. .



  1. Hvordan får man MySQL til at håndtere strenge som SQLite gør, med hensyn til Unicode og kollation?

  2. Python:Forespørgsel til data efter lyd

  3. Forhindrer brug af WordPress get_results()-databasefunktionen sql-injektion

  4. Opret flere tabeller ved at cykle gennem en forespørgsel