Есть поле а таблице типа varchar. Из классического ASP туда сохраняется русский текст в кривой кодировке (так: Èãðà â êëàññèêîâ)
А при выводе не странице отображается корректно. Так приложение и работает много лет.
Но при выводе этого текста из ASP.NET (новые разработки) выводится криво. И хранится криво, если просто сделать селект из management studio.
Как это починить? Есть вариант сменить типа колонки с varchar на nvarchar.
Но как при этом откастить уже имеющиеся значения?
Здравствуйте, karkasch, Вы писали:
K>Есть поле а таблице типа varchar. Из классического ASP туда сохраняется русский текст в кривой кодировке (так: Èãðà â êëàññèêîâ) K>А при выводе не странице отображается корректно. Так приложение и работает много лет.
K>Но при выводе этого текста из ASP.NET (новые разработки) выводится криво. И хранится криво, если просто сделать селект из management studio.
K>Как это починить? Есть вариант сменить типа колонки с varchar на nvarchar. K>Но как при этом откастить уже имеющиеся значения?
K>Спасибо
SET NAMES CP1251 (ну или какая там кодировка используется) сразу первым запросом после подсоединения к базе не поможет?
Re[2]: кривая кодировка кирилицы в varchar (MSSQL)
Здравствуйте, Аноним, Вы писали:
А>SET NAMES CP1251 (ну или какая там кодировка используется) сразу первым запросом после подсоединения к базе не поможет?
На сколько я понял, SET NAMES, это в MySql. А у меня MS SQL.
Пробовал делать такой запрос:
SELECT MyVarcharCol COLLATE <Collation_Name> FROM tbl
K>Но как при этом откастить уже имеющиеся значения?
create table #t ( name varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS)
insert into #t (name)values(N'Ea?a a eeanneeia')
select name,cast(CAST(name as varbinary(max)) as varchar(max))
from #t
drop table #t
результат "Игра в классиков"
PS: твои юникодные кракозябры тут малеха попортились
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: кривая кодировка кирилицы в varchar (MSSQL)
K>Проверил, локально работает. K>На продакшен серваке не работает. В обоих случаях кракозябры.
вероятно это значит что коллэйшн по умолчанию latin, просто его явно указать надо
create table #t ( name varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS, name2 varchar(255) COLLATE Cyrillic_general_ci_as)
insert into #t (name, name2) values(N'Ea?a a eeanneeia', N'')
update #t
set name2 = CAST(name as varbinary(max))
select * from #t
drop table #t