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

SQL Server връща??? когато колоната се актуализира с тайландски знаци

Във въпроса не е предоставена много информация. Всичко, което знаем е:

  • Колоната използва съпоставяне на Thai_CI_AS (поне това звучи така, както гласи въпросът)
  • Предават се тайландски знаци
  • Това, което се съхранява в колоната е:???

Само от това обаче можем да заключим две неща:

  1. Входящият низ не е нито NVARCHAR параметър / променлива, нито е низов литерал, който има префикс с главна буква "N",

    и

  2. Подреждането по подразбиране за DB, в която се изпълнява заявката (не непременно DB, в която съществува таблицата), е не тайландска колекция.

Не знаем дали колоната местоназначение е VARCHAR или NVARCHAR , но това няма значение дали съпоставянето на колоната е тайландско съпоставяне (тъй като това ще позволи VARCHAR данни за съхранение на тайландски знаци и NVARCHAR ще работи независимо).

Ако или :

  • входящият низ използва NVARCHAR параметър (или ако низов литерал, тогава префикс с главна буква "N"),

    или

  • заявката е изпълнена в DB, ​​която има подразбиране за Thai Collation

тогава тайландските знаци ще бъдат съхранени според очакванията.

Следващият пример демонстрира това поведение. Използвам тайландски символ Khomut U+0E5B на екземпляр с Korean_100_CS_AS_KS_WS_SC Съпоставяне по подразбиране на ниво екземпляр. Колоната за местоназначение има съвпадение на Thai_CI_AS . Първо, докато "текущата" DB е тази, която не има тайландска подредба по подразбиране, добавям знака два пъти:веднъж с префикс „N“ и веднъж без префикс в литерала на низа:

USE [tempdb];
-- DROP TABLE #Thai;
CREATE TABLE #Thai (ID INT IDENTITY(1, 1), Col1 VARCHAR(50) COLLATE Thai_CI_AS);

-- In a DB with a non-Thai default Collation:
INSERT INTO #Thai (Col1) VALUES ('๛');
INSERT INTO #Thai (Col1) VALUES (N'๛');

След това преминавам към база данни, която прави имат тайландска подредба по подразбиране и вмъкват само низа без префикс (няма реална нужда да тествате отново низа с префикс "N"):

USE [other_db];

-- In a DB with a Thai default Collation:
INSERT INTO #Thai (Col1) VALUES ('๛');


SELECT * FROM #Thai;

Резултатът е:

ID  Col1
1   ?
2   ๛
3   ๛

Както можете да видите (точка # по-долу се отнася до ID # в резултатите по-горе):

  1. Низът с префикс без "N", използван в DB, ​​използващ не-тайландско съпоставяне по подразбиране, е преведен в ?
  2. Низът с префикс "N", използван също и в DB, ​​използващ не-тайландско съпоставяне по подразбиране, съхрани стойността правилно
  3. Низът с префикс без "N", използван в DB, ​​който има подразбираща се тайландска подредба, съхрани стойността правилно



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да форматирате getdate в YYYYMMDDHHmmSS

  2. Импортиране/експортиране на база данни със SQL Server Management Studio

  3. Използване на SQL Server като механизъм за заключване на ресурси

  4. Как да се свържа с mssql с помощта на pdo през PHP и Linux?

  5. Персонализирайте алармите в облака на прожекторите