кривая кодировка кирилицы в varchar (MSSQL)
От: karkasch  
Дата: 12.01.11 08:26
Оценка:
Есть поле а таблице типа varchar. Из классического ASP туда сохраняется русский текст в кривой кодировке (так: Èãðà â êëàññèêîâ)
А при выводе не странице отображается корректно. Так приложение и работает много лет.

Но при выводе этого текста из ASP.NET (новые разработки) выводится криво. И хранится криво, если просто сделать селект из management studio.

Как это починить? Есть вариант сменить типа колонки с varchar на nvarchar.
Но как при этом откастить уже имеющиеся значения?

Спасибо
mssql varchar nvarchar
Re: кривая кодировка кирилицы в varchar (MSSQL)
От: Аноним  
Дата: 12.01.11 10:51
Оценка:
Здравствуйте, karkasch, Вы писали:

K>Есть поле а таблице типа varchar. Из классического ASP туда сохраняется русский текст в кривой кодировке (так: Èãðà â êëàññèêîâ)

K>А при выводе не странице отображается корректно. Так приложение и работает много лет.

K>Но при выводе этого текста из ASP.NET (новые разработки) выводится криво. И хранится криво, если просто сделать селект из management studio.


K>Как это починить? Есть вариант сменить типа колонки с varchar на nvarchar.

K>Но как при этом откастить уже имеющиеся значения?

K>Спасибо


SET NAMES CP1251 (ну или какая там кодировка используется) сразу первым запросом после подсоединения к базе не поможет?
Re[2]: кривая кодировка кирилицы в varchar (MSSQL)
От: karkasch  
Дата: 12.01.11 13:14
Оценка:
Здравствуйте, Аноним, Вы писали:

А>SET NAMES CP1251 (ну или какая там кодировка используется) сразу первым запросом после подсоединения к базе не поможет?


На сколько я понял, SET NAMES, это в MySql. А у меня MS SQL.
Пробовал делать такой запрос:

SELECT MyVarcharCol COLLATE <Collation_Name> FROM tbl


но результат тот же — в кривой кодировке
Re: кривая кодировка кирилицы в varchar (MSSQL)
От: rm822 Россия  
Дата: 13.01.11 07:08
Оценка:
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)
От: karkasch  
Дата: 14.01.11 08:35
Оценка:
Здравствуйте, rm822, Вы писали:

R>
R>create table #t ( name varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS)
R>insert into #t (name)values(N'Ea?a a eeanneeia')
R>select name,cast(CAST(name as varbinary(max)) as varchar(max))
R>from #t
R>drop table #t
R>

R>результат "Игра в классиков"
R>PS: твои юникодные кракозябры тут малеха попортились

О! Спасибо! Попробую.
Re[2]: кривая кодировка кирилицы в varchar (MSSQL)
От: karkasch  
Дата: 23.01.11 20:24
Оценка:
Здравствуйте, rm822, Вы писали:

K>>Но как при этом откастить уже имеющиеся значения?

R>
R>create table #t ( name varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS)
R>insert into #t (name)values(N'Ea?a a eeanneeia')
R>select name,cast(CAST(name as varbinary(max)) as varchar(max))
R>from #t
R>drop table #t
R>

R>результат "Игра в классиков"
R>PS: твои юникодные кракозябры тут малеха попортились

Проверил, локально работает.
На продакшен серваке не работает. В обоих случаях кракозябры.
Re[3]: кривая кодировка кирилицы в varchar (MSSQL)
От: rm822 Россия  
Дата: 24.01.11 23:27
Оценка:
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
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.