Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Какво представлява нулевият символен литерал в TSQL?

В отговора на Cade Roux има две различни поведения:замяната е успешна (когато се използва SQL съпоставяне) и неуспешна (използва се съпоставяне на Windows). Причината е във вида на използваното съпоставяне.

Това поведение беше изпратено на Microsoft преди близо 4 години:

В: Когато се опитвате да замени NUL символ с replace(), това работи, ако стойността има SQL съпоставяне, но не и сравнение на Windows.

А: Това се дължи на факта, че 0x0000 е недефиниран знак в Windowscollations. Всички недефинирани знаци се игнорират по време на сравнение, сортиране и съвпадение на шаблон. Така че търсенето на „a“ + char(0) наистина е търсене на „a“, а търсенето на char(0) е еквивалентно на празен низ.

Начинът за обработка на недефинирани символи е малко объркващ, но това е начинът, който Windows дефинира за сортирането им, а SQL Server отговаря на общия API на Windows.

В SQL съпоставянето няма понятие за недефиниран символ. На всяка кодова точка е присвоена тежест, затова не виждаме проблем там.

но за съжаление все още не е документирано.

Така че изглежда единственото решение е да промените съпоставянето към SQL съпоставяне (напр. SQL_Latin1_General_CP1_CI_AS може да се използва също).

Премахнах предишния си отговор като ненужен



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Случайна стойност за колона DATETIME

  2. Как да разрешите невъзможността да се превключи грешката в кодирането при вмъкване на XML в SQL Server

  3. TSQL - Как да използвам GO вътре в блок BEGIN .. END?

  4. Временната таблица на Sql Server изчезва

  5. Връщане на списък със схеми на дялове в SQL Server (T-SQL)