ƒобро пожаловать в форум, Guest††>>†† ¬ойти†|†–егистрац舆| ѕоиск†|†ѕравила†| ¬ избранное | ѕодписатьс€
¬се форумы / Microsoft SQL Server Ќовый топик †† ќтветить
 » оп€ть кодировка  [new]
ozzymous
Member

ќткуда:
—ообщений: 10
ƒобрый день, коллеги!
ƒл€ работы сети ј¬ѕќ используетс€ MS SQL Server 2005, антивирусный сервер подключаетс€ к базе через ODBC.
ѕри селекте из таблицы заражений, содержащей пути к зараженным файлам на русском €зыке, получаем кракоз€бры вместо русских букв. “о же самое происходит, когда запрос делаетс€ не через Studio, а VB-скриптом:

Sub  нопка1_ўелчок()
Dim nc As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim isql, str_con As String
Dim i As Long
nc.Open "Provider=SQLOLEDB; Data Source=10.182.185.151; Initial Catalog=dwes-test; User ID=dwes-test; PWD="
isql = "select top 100 object from dbo.infection"
rs.Open isql, nc
Range("a1" & i) = "object"
i = 2
Do Until rs.EOF
    Range("a" & i) = rs!Object
    rs.MoveNext
    i = i + 1
Loop
rs.Close
nc.Close
Set rs = Nothing
Set nc = Nothing
End Sub


ќдна из строк с "русскими" буквами из такого запроса:

K:\–љ–Њ–≤–∞—П –њ–∞–њ–Ї–∞\–љ–Њ–≤–∞—П –њ–∞–њ–Ї–∞2\data\soft\odmin\net\r_server\r_server.exe


ѕри этом встроенные средства антивируса позвол€ют просматривать информацию о заражени€х с корректным отображением... ¬ чем загвоздка?
15 дек 11, 16:59††††[11773148]     ќтветить | ÷итировать —ообщить модератору
 Re: » оп€ть кодировка  [new]
aleks2
Guest
ѕроблема в несогласованности Collation сервера, €зыка клиента по-умолчанию и кодовой страницы Windows.

¬ профайлере посмотрите опции подключени€ "встроенных средств антивируса" и сделайте также.
«аодно взгл€ните и на запрос.

Ќа крайн€к - запрашивайте c конвертацией в binary на сервере и конвертируйте обратно на клиенте.
15 дек 11, 17:08††††[11773247]     ќтветить | ÷итировать —ообщить модератору
 Re: » оп€ть кодировка  [new]
ozzymous
Member

ќткуда:
—ообщений: 10
Collation провер€л.
автор
¬ профайлере посмотрите опции подключени€ "встроенных средств антивируса" и сделайте также.
«аодно взгл€ните и на запрос.

»звините ламера, но как?)
16 дек 11, 08:51††††[11775757]     ќтветить | ÷итировать —ообщить модератору
 Re: » оп€ть кодировка  [new]
aleks2
Guest
1. ѕрофайлер называетс€ Profiler. Ёто стандартна€ утилита поставки MS SQL (окром€ express).

2. ¬ы бы всеж посмотрели коды (бинарное представление) русских символов на сервере и после получени€ на клиенте.
’оть пон€тнее будет хде засада.
16 дек 11, 10:40††††[11776114]     ќтветить | ÷итировать —ообщить модератору
 Re: » оп€ть кодировка  [new]
alexeyvg
Member

ќткуда: Moscow
—ообщений: 31964
ozzymous
Collation провер€л.
» какой он, этот Collation, какой тип данных, что хранитс€ в поле?

ѕодозреваю, что данные хран€тьс€ в формате oem, так что только перекодировать на клиенте.
16 дек 11, 10:47††††[11776156]     ќтветить | ÷итировать —ообщить модератору
 Re: » оп€ть кодировка  [new]
ozzymous
Member

ќткуда:
—ообщений: 10
Collation Cyrillic_General_Cl_AS
ƒанные в это поле записываютс€ в Utf-8.
 ак посмотреть бинарное представление?
16 дек 11, 11:55††††[11776629]     ќтветить | ÷итировать —ообщить модератору
 Re: » оп€ть кодировка  [new]
aleks2
Guest
ozzymous
 ак посмотреть бинарное представление?


select cast(aField as varbinary(8000)) from aTable
16 дек 11, 12:01††††[11776675]     ќтветить | ÷итировать —ообщить модератору
 Re: » оп€ть кодировка  [new]
alexeyvg
Member

ќткуда: Moscow
—ообщений: 31964
ozzymous
ƒанные в это поле записываютс€ в Utf-8.
“огда перекодировать на клиенте или на сервере при получении данных.
Ќа сервере это сложнее, встроенных средств нету.
16 дек 11, 12:03††††[11776698]     ќтветить | ÷итировать —ообщить модератору
 Re: » оп€ть кодировка  [new]
ozzymous
Member

ќткуда:
—ообщений: 10
 ак из varbinary сконвертировать обратно в строку?
26 дек 11, 14:26††††[11826702]     ќтветить | ÷итировать —ообщить модератору
 Re: » оп€ть кодировка  [new]
ozzymous
Member

ќткуда:
—ообщений: 10
Ѕеда....
ƒелаю select cast(object as varbinary(8000)) from aTable
получаю столбец.
Ѕеру значение из этого столбца, декодирую обратно:
Print Convert(varchar(64), 0x........................, 0), где вместо точек символы
в итоге получаю оп€ть вместо русских символов вопросительные знаки. :(
26 дек 11, 14:35††††[11826788]     ќтветить | ÷итировать —ообщить модератору
 Re: » оп€ть кодировка  [new]
ozzymous
Member

ќткуда:
—ообщений: 10
—итуаци€ очень похожа на https://www.sql.ru/forum/actualthread.aspx?tid=767727...  ак € пон€л, можно реализовать только через перекодировку.
ѕодскажите, пожалуйста, как...
26 дек 11, 16:18††††[11827733]     ќтветить | ÷итировать —ообщить модератору
 Re: » оп€ть кодировка  [new]
mccc
Member [заблокирован]

ќткуда:  азань
—ообщений: 7650
ozzymous,
вот таблица переколировки UTF8 - CP1251
if (object_id ('tempdb..#UTF8', N'U') is not null) drop table #UTF8
create table #UTF8 (
	 h binary(1)
	,s char(1)
	,u varbinary(3)
)
insert #UTF8 select 0x80, 'А', 0xD0 + 0x82
insert #UTF8 select 0x81, 'Б', 0xD0 + 0x83
insert #UTF8 select 0x82, 'В', 0xE2 + 0x80 + 0x9A
insert #UTF8 select 0x83, 'Г', 0xD1 + 0x93
insert #UTF8 select 0x84, 'Д', 0xE2 + 0x80 + 0x9E
insert #UTF8 select 0x85, 'Е', 0xE2 + 0x80 + 0xA6
insert #UTF8 select 0x86, 'Ж', 0xE2 + 0x80 + 0xA0
insert #UTF8 select 0x87, 'З', 0xE2 + 0x80 + 0xA1
insert #UTF8 select 0x88, 'И', 0xE2 + 0x82 + 0xAC
insert #UTF8 select 0x89, 'Й', 0xE2 + 0x80 + 0xB0
insert #UTF8 select 0x8A, 'К', 0xD0 + 0x89
insert #UTF8 select 0x8B, 'Л', 0xE2 + 0x80 + 0xB9
insert #UTF8 select 0x8C, 'М', 0xD0 + 0x8A
insert #UTF8 select 0x8D, 'Н', 0xD0 + 0x8C
insert #UTF8 select 0x8E, 'О', 0xD0 + 0x8B
insert #UTF8 select 0x8F, 'П', 0xD0 + 0x8F
insert #UTF8 select 0x90, 'Р', 0xD1 + 0x92
insert #UTF8 select 0x91, 'С', 0xE2 + 0x80 + 0x98
insert #UTF8 select 0x92, 'Т', 0xE2 + 0x80 + 0x99
insert #UTF8 select 0x93, 'У', 0xE2 + 0x80 + 0x9C
insert #UTF8 select 0x94, 'Ф', 0xE2 + 0x80 + 0x9D
insert #UTF8 select 0x95, 'Х', 0xE2 + 0x80 + 0xA2
insert #UTF8 select 0x96, 'Ц', 0xE2 + 0x80 + 0x93
insert #UTF8 select 0x97, 'Ч', 0xE2 + 0x80 + 0x94
insert #UTF8 select 0x98, 'Ш', 0xC2 + 0x98
insert #UTF8 select 0x99, 'Щ', 0xE2 + 0x84 + 0xA2
insert #UTF8 select 0x9A, 'Ъ', 0xD1 + 0x99
insert #UTF8 select 0x9B, 'Ы', 0xE2 + 0x80 + 0xBA
insert #UTF8 select 0x9C, 'Ь', 0xD1 + 0x9A
insert #UTF8 select 0x9D, 'Э', 0xD1 + 0x9C
insert #UTF8 select 0x9E, 'Ю', 0xD1 + 0x9B
insert #UTF8 select 0x9F, 'Я', 0xD1 + 0x9F
insert #UTF8 select 0xA0, '†', 0xC2 + 0xA0
insert #UTF8 select 0xA1, '°', 0xD0 + 0x8E
insert #UTF8 select 0xA2, 'Ґ', 0xD1 + 0x9E
insert #UTF8 select 0xA3, '£', 0xD0 + 0x88
insert #UTF8 select 0xA4, '§', 0xC2 + 0xA4
insert #UTF8 select 0xA5, '•', 0xD2 + 0x90
insert #UTF8 select 0xA6, '¶', 0xC2 + 0xA6
insert #UTF8 select 0xA7, 'І', 0xC2 + 0xA7
insert #UTF8 select 0xA8, '®', 0xD0 + 0x81
insert #UTF8 select 0xA9, '©', 0xC2 + 0xA9
insert #UTF8 select 0xAA, '™', 0xD0 + 0x84
insert #UTF8 select 0xAB, 'Ђ', 0xC2 + 0xAB
insert #UTF8 select 0xAC, 'ђ', 0xC2 + 0xAC
insert #UTF8 select 0xAD, '≠', 0xC2 + 0xAD
insert #UTF8 select 0xAE, 'Ѓ', 0xC2 + 0xAE
insert #UTF8 select 0xAF, 'ѓ', 0xD0 + 0x87
insert #UTF8 select 0xB0, '∞', 0xC2 + 0xB0
insert #UTF8 select 0xB1, '±', 0xC2 + 0xB1
insert #UTF8 select 0xB2, '≤', 0xD0 + 0x86
insert #UTF8 select 0xB3, '≥', 0xD1 + 0x96
insert #UTF8 select 0xB4, 'і', 0xD2 + 0x91
insert #UTF8 select 0xB5, 'µ', 0xC2 + 0xB5
insert #UTF8 select 0xB6, 'ґ', 0xC2 + 0xB6
insert #UTF8 select 0xB7, 'Ј', 0xC2 + 0xB7
insert #UTF8 select 0xB8, 'Є', 0xD1 + 0x91
insert #UTF8 select 0xB9, 'є', 0xE2 + 0x84 + 0x96
insert #UTF8 select 0xBA, 'Ї', 0xD1 + 0x94
insert #UTF8 select 0xBB, 'ї', 0xC2 + 0xBB
insert #UTF8 select 0xBC, 'Љ', 0xD1 + 0x98
insert #UTF8 select 0xBD, 'љ', 0xD0 + 0x85
insert #UTF8 select 0xBE, 'Њ', 0xD1 + 0x95
insert #UTF8 select 0xBF, 'њ', 0xD1 + 0x97
insert #UTF8 select 0xC0, 'ј', 0xD0 + 0x90
insert #UTF8 select 0xC1, 'Ѕ', 0xD0 + 0x91
insert #UTF8 select 0xC2, '¬', 0xD0 + 0x92
insert #UTF8 select 0xC3, '√', 0xD0 + 0x93
insert #UTF8 select 0xC4, 'ƒ', 0xD0 + 0x94
insert #UTF8 select 0xC5, '≈', 0xD0 + 0x95
insert #UTF8 select 0xC6, '∆', 0xD0 + 0x96
insert #UTF8 select 0xC7, '«', 0xD0 + 0x97
insert #UTF8 select 0xC8, '»', 0xD0 + 0x98
insert #UTF8 select 0xC9, '…', 0xD0 + 0x99
insert #UTF8 select 0xCA, ' ', 0xD0 + 0x9A
insert #UTF8 select 0xCB, 'Ћ', 0xD0 + 0x9B
insert #UTF8 select 0xCC, 'ћ', 0xD0 + 0x9C
insert #UTF8 select 0xCD, 'Ќ', 0xD0 + 0x9D
insert #UTF8 select 0xCE, 'ќ', 0xD0 + 0x9E
insert #UTF8 select 0xCF, 'ѕ', 0xD0 + 0x9F
insert #UTF8 select 0xD0, '–', 0xD0 + 0xA0
insert #UTF8 select 0xD1, '—', 0xD0 + 0xA1
insert #UTF8 select 0xD2, '“', 0xD0 + 0xA2
insert #UTF8 select 0xD3, '”', 0xD0 + 0xA3
insert #UTF8 select 0xD4, '‘', 0xD0 + 0xA4
insert #UTF8 select 0xD5, '’', 0xD0 + 0xA5
insert #UTF8 select 0xD6, '÷', 0xD0 + 0xA6
insert #UTF8 select 0xD7, '„', 0xD0 + 0xA7
insert #UTF8 select 0xD8, 'Ў', 0xD0 + 0xA8
insert #UTF8 select 0xD9, 'ў', 0xD0 + 0xA9
insert #UTF8 select 0xDA, 'Џ', 0xD0 + 0xAA
insert #UTF8 select 0xDB, 'џ', 0xD0 + 0xAB
insert #UTF8 select 0xDC, '№', 0xD0 + 0xAC
insert #UTF8 select 0xDD, 'Ё', 0xD0 + 0xAD
insert #UTF8 select 0xDE, 'ё', 0xD0 + 0xAE
insert #UTF8 select 0xDF, 'я', 0xD0 + 0xAF
insert #UTF8 select 0xE0, 'а', 0xD0 + 0xB0
insert #UTF8 select 0xE1, 'б', 0xD0 + 0xB1
insert #UTF8 select 0xE2, 'в', 0xD0 + 0xB2
insert #UTF8 select 0xE3, 'г', 0xD0 + 0xB3
insert #UTF8 select 0xE4, 'д', 0xD0 + 0xB4
insert #UTF8 select 0xE5, 'е', 0xD0 + 0xB5
insert #UTF8 select 0xE6, 'ж', 0xD0 + 0xB6
insert #UTF8 select 0xE7, 'з', 0xD0 + 0xB7
insert #UTF8 select 0xE8, 'и', 0xD0 + 0xB8
insert #UTF8 select 0xE9, 'й', 0xD0 + 0xB9
insert #UTF8 select 0xEA, 'к', 0xD0 + 0xBA
insert #UTF8 select 0xEB, 'л', 0xD0 + 0xBB
insert #UTF8 select 0xEC, 'м', 0xD0 + 0xBC
insert #UTF8 select 0xED, 'н', 0xD0 + 0xBD
insert #UTF8 select 0xEE, 'о', 0xD0 + 0xBE
insert #UTF8 select 0xEF, 'п', 0xD0 + 0xBF
insert #UTF8 select 0xF0, 'р', 0xD1 + 0x80
insert #UTF8 select 0xF1, 'с', 0xD1 + 0x81
insert #UTF8 select 0xF2, 'т', 0xD1 + 0x82
insert #UTF8 select 0xF3, 'у', 0xD1 + 0x83
insert #UTF8 select 0xF4, 'ф', 0xD1 + 0x84
insert #UTF8 select 0xF5, 'х', 0xD1 + 0x85
insert #UTF8 select 0xF6, 'ц', 0xD1 + 0x86
insert #UTF8 select 0xF7, 'ч', 0xD1 + 0x87
insert #UTF8 select 0xF8, 'ш', 0xD1 + 0x88
insert #UTF8 select 0xF9, 'щ', 0xD1 + 0x89
insert #UTF8 select 0xFA, 'ъ', 0xD1 + 0x8A
insert #UTF8 select 0xFB, 'ы', 0xD1 + 0x8B
insert #UTF8 select 0xFC, 'ь', 0xD1 + 0x8C
insert #UTF8 select 0xFD, 'э', 0xD1 + 0x8D
insert #UTF8 select 0xFE, 'ю', 0xD1 + 0x8E
insert #UTF8 select 0xFF, '€', 0xD1 + 0x8F
/*
select * from #UTF8 order by h

select * from #UTF8 where len(u) = 2 order by u
select * from #UTF8 where len(u) = 3 order by u
*/
26 дек 11, 17:17††††[11828359]     ќтветить | ÷итировать —ообщить модератору
 Re: » оп€ть кодировка  [new]
Vadyev
Member

ќткуда:
—ообщений: 1
пон€тно.
26 дек 11, 19:39††††[11829322]     ќтветить | ÷итировать —ообщить модератору
¬се форумы / Microsoft SQL Server ќтветить