sql >> Databáze >  >> RDS >> Sqlserver

Co je literál Null Character v TSQL?

V odpovědi Cade Roux existují dvě různá chování:nahrazení je úspěšné (když je použito řazení SQL) a neúspěšné (je použito řazení Windows). Důvodem je typ použitého řazení.

Toto chování bylo společnosti Microsoft předloženo téměř před 4 lety:

Otázka: Při pokusu o nahrazení znaku NUL pomocí replace() to funguje, pokud má hodnota řazení SQL, ale ne řazení Windows.

Odpověď: To je způsobeno skutečností, že 0x0000 je ve Windowscollations nedefinovaný znak. Všechny nedefinované znaky jsou během porovnávání, řazení a porovnávání vzorů ignorovány. Takže hledání pro 'a' + char(0) je ve skutečnosti hledání 'a' a hledání char(0) je ekvivalentní prázdnému řetězci.

Způsob, jak zacházet s nedefinovanými znaky, je trochu matoucí, ale je to způsob, který systém Windows definoval, aby je třídil, a SQL Server odpovídá obecnému rozhraní Windows API.

V řazení SQL neexistuje pojem nedefinovaného znaku. Každému kódovému bodu je přiřazena váha, proto v tom nevidíme problém.

ale bohužel je stále nezdokumentovaný.

Zdá se tedy, že jediným řešením je změnit řazení na řazení SQL (např. SQL_Latin1_General_CP1_CI_AS lze také použít).

Odstranil jsem svou předchozí odpověď jako nepotřebnou



  1. Použití MySQLi z jiné třídy v PHP

  2. Schéma databáze, autoinkrementace

  3. Jak zadat číslo portu v připojovacím řetězci SQL Server?

  4. Najděte název odkazované tabulky pomocí názvu tabulky, pole a schématu