Имам таблица, която по някаква причина съхранява текст като IMAGE. Мога да хвана данните и да ги прочета
SELECT CONVERT(NVARCHAR(MAX), CONVERT(VARBINARY(MAX), column,2)) FROM table
Сега трябва да вмъкна данни в таблицата. Опитах
SELECT CONVERT(IMAGE, CAST("TEST TEXT" AS VARBINARY(MAX)))
Но когато тествам конвертирането обратно
SELECT CONVERT(NVARCHAR(MAX), CONVERT(VARBINARY(MAX), CONVERT(IMAGE, CAST("TEST TEXT" AS VARBINARY(MAX))),2))
Той връща 䕔 呓 吠 塅, което очевидно не е правилно, тъй като трябва да се върне "TEST TEXT"
Какво правим тук?
Отговори:
1 за отговор № 1Текстът, който се опитвате да съхраните, е кодиран като двоичен ASCII
знаци. Опитвате се да го превърнете обратно в a Unicode
текстов низ, който не е това, което първоначално е, затова отново се връщате в изкривен текст.
Променете текстовия ни низ в a Unicode
string чрез добавяне на N пред него:
SELECT CONVERT(NVARCHAR(MAX), CONVERT(VARBINARY(MAX), CONVERT(IMAGE, CAST(N"TEST TEXT" AS VARBINARY(MAX))),2))
То трябва да върне правилния текст. Тестван на SQL Server 2008
1 за отговор № 2
Можете да използвате тази:
SELECT CONVERT(**VARCHAR(MAX)**, CONVERT(VARBINARY(MAX), **CAST("TEST TEXT" AS IMAGE)**,**0**))
По принцип не сте били съвместими с вашитетип реализации. В някои части сте използвали NVarChar и някои части Varchar. Също така, номерът 2 в края се отразява на резултата. В тестовете за преобразуване, когато не посочите кода, се използва стойността по подразбиране (0). Така че, ако го конвертирате обратно, трябва да използвате същия код.