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

SQL Server returnerer ??? når kolonnen er opdateret med thailandske tegn

Der er ikke mange oplysninger i spørgsmålet. Det eneste vi ved er:

  • Kolonne bruger sortering af Thai_CI_AS (i det mindste at det var, det lyder som om spørgsmålet siger)
  • Thaiske tegn sendes ind
  • Det, der er gemt i kolonnen, er:???

Men ud fra det alene kan vi udlede to ting:

  1. Den indgående streng er hverken en NVARCHAR parameter / variabel, og det er heller ikke en streng-literal, der er præfikset med et stort "N",

    og

  2. Standardsorteringen for den DB, hvori forespørgslen udføres (ikke nødvendigvis den DB, hvori tabellen findes) er ikke en thailandsk samling.

Vi ved ikke, om destinationskolonnen er VARCHAR eller NVARCHAR , men det betyder ikke noget, hvis kolonnens samling er en thailandsk samling (da det vil tillade VARCHAR data til at indeholde thailandske tegn og NVARCHAR ville virke uanset).

Hvis enten :

  • den indkommende streng bruger en NVARCHAR parameter (eller hvis streng er bogstavelig, så præfiks med et stort "N"),

    eller

  • forespørgslen blev udført i en DB, der har en thailandsk standardsortering

så ville de thailandske tegn blive gemt som forventet.

Følgende eksempel viser denne adfærd. Jeg bruger en Thai Character Khomut U+0E5B på en forekomst med en Korean_100_CS_AS_KS_WS_SC Standardindsamling på instansniveau. Destinationskolonnen har en sortering af Thai_CI_AS . For det første, mens den "aktuelle" DB er en, der ikke gør har en thailandsk standardsortering, tilføjer jeg tegnet to gange:én gang præfikset med "N" og én gang uden præfiks på strengen literal:

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'๛');

Dernæst skifter jeg til en DB, der gør har en thailandsk standardsortering, og indsæt kun den ikke-præfiksede streng (intet reelt behov for at teste "N"-præfikset strengen igen):

USE [other_db];

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


SELECT * FROM #Thai;

Resultatet er:

ID  Col1
1   ?
2   ๛
3   ๛

Som du kan se (punkt # nedenfor vedrører ID # i resultaterne ovenfor):

  1. Den streng, der ikke er "N"-præfiks, brugt i en DB ved hjælp af en ikke-thailandsk standardsortering, blev oversat til ?
  2. Strengen med "N"-præfikset, der også bruges i en DB, der bruger en ikke-thailandsk standardsortering, lagrede værdien korrekt
  3. Strengen uden "N"-præfiks, der bruges i en DB, der har en thailandsk standardsortering, lagrede værdien korrekt



  1. Installation af mysql2 gem til Ruby on Rails med Mac OSX 10.6

  2. VARCHAR(MAX) opfører sig underligt ved sammenkædning af streng

  3. SLIP TABEL HVIS FINNES i MySQL

  4. Kan en fremmednøgle fungere som primærnøgle?