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

Hvad er null-tegnet bogstaveligt i TSQL?

Der er to forskellige adfærd i Cade Roux's svar:udskiftning er vellykket (når SQL-sortering bruges) og mislykket (Windows-sortering bruges). Årsagen er den anvendte sorteringstype.

Denne adfærd blev indsendt til Microsoft for næsten 4 år siden:

Sp: Når du prøver at erstatte et NUL-tegn med replace(), virker dette, at værdien har en SQL-sortering, men ikke en Windows-sortering.

A: Dette skyldes det faktum, at 0x0000 er et udefineret tegn i Windows-kollationer. Alle udefinerede tegn ignoreres under sammenligning, sortering og mønstermatchning. Så at søge efter 'a' + char(0) er virkelig at søge efter 'a', og at søge efter char(0) svarer til tom streng.

Måden at håndtere udefinerede karakterer på er lidt forvirrende, men det er den måde, Windows definerede for at sortere dem på, og SQL Server er i overensstemmelse med den generelle Windows API.

I SQL-sortering er der ingen forestilling om udefinerede tegn. Hvert kodepunkt er tildelt en vægt, det er derfor, vi ikke ser et problem der.

men desværre er den stadig udokumenteret.

Så det ser ud til, at den eneste løsning er at ændre sortering til SQL-sortering (f.eks. SQL_Latin1_General_CP1_CI_AS kan også bruges).

Jeg fjernede mit tidligere svar som unødvendigt



  1. R DBI ODBC-fejl:nanodbc/nanodbc.cpp:3110:07009:[Microsoft][ODBC-driver 13 til SQL Server]Ugyldigt deskriptorindeks

  2. Hvordan får man kolonneattributter forespørgsel fra tabelnavn ved hjælp af PostgreSQL?

  3. Sådan finder du den maksimale værdi af en numerisk kolonne i SQL

  4. Tilslutning af MS SQL til IRI Workbench