Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Передача в MS SQL Server 2000 запроса, в котором присутствуют русские буквы  [new]
ShurikEv
Member

Откуда: Россия, Новосибирск
Сообщений: 122
Сталкнулся с такой проблемой.
Использую под QNX4.25 (QNX - операционная система реального времени) библиотеку tds для связи с MS SQL Server 2000. С её помощью я заполняю там таблицу. Всё бы хорошо, НО если при заполнение текстового поля русскими буквами туда пишутся кракозябры.
Кто-нибудь знает как по-русски туда писать. Пробовал передвать в разных кодировках, ничего не помогает :0(
Подскажите, пожалуйста

PS Столкнулся я с этим только в 2000 версии, до этого в MS SQL Server 7 такого не было. В чём собака зарыта?
1 фев 05, 14:00    [1290551]     Ответить | Цитировать Сообщить модератору
 Re: Передача в MS SQL Server 2000 запроса, в котором присутствуют русские буквы  [new]
*alex++
Member

Откуда:
Сообщений: 80
Может быть попробовать текстовые поля в базе сделать nvarchar?
1 фев 05, 14:17    [1290633]     Ответить | Цитировать Сообщить модератору
 Re: Передача в MS SQL Server 2000 запроса, в котором присутствуют русские буквы  [new]
ShurikEv
Member

Откуда: Россия, Новосибирск
Сообщений: 122
*alex++
Может быть попробовать текстовые поля в базе сделать nvarchar?

Они там и так такие
1 фев 05, 14:22    [1290664]     Ответить | Цитировать Сообщить модератору
 Re: Передача в MS SQL Server 2000 запроса, в котором присутствуют русские буквы  [new]
Богдан Гоцкий
Member

Откуда: Львов
Сообщений: 504
А collation сервера и nvarchar-полей?
1 фев 05, 15:16    [1290926]     Ответить | Цитировать Сообщить модератору
 Re: Передача в MS SQL Server 2000 запроса, в котором присутствуют русские буквы  [new]
ShurikEv
Member

Откуда: Россия, Новосибирск
Сообщений: 122
Богдан Гоцкий
А collation сервера и nvarchar-полей?

Не совсем понял вопрос. Что значит collation сервера ? Где его проверить? И nvarchar-полей? Что имелось ввиду? Стоит поле типа nvarchar длина 124. Присылается заведомо значение меньшей длины.
Выражаетесь мне тут :0)
1 фев 05, 15:28    [1290989]     Ответить | Цитировать Сообщить модератору
 Re: Передача в MS SQL Server 2000 запроса, в котором присутствуют русские буквы  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
Не совсем понял вопрос. Что значит collation сервера ? Где его проверить?


sp_helpsort
1 фев 05, 15:32    [1291008]     Ответить | Цитировать Сообщить модератору
 Re: Передача в MS SQL Server 2000 запроса, в котором присутствуют русские буквы  [new]
Богдан Гоцкий
Member

Откуда: Львов
Сообщений: 504
ShurikEv

Не совсем понял вопрос. Что значит collation сервера ? Где его проверить? И nvarchar-полей? Что имелось ввиду? Стоит поле типа nvarchar длина 124. Присылается заведомо значение меньшей длины.
Выражаетесь мне тут :0)


Collation nvarchar полей в базе по идее (если вы ничего не трогали) должен совпадать с collation всей вашей базы. Жмите в Enterprise Manager-e правой педалью на базе, и в свойствах увидите collation базы.
Collation сервера = Collation master - базы. Как посмотреть вы уже знаете.
1 фев 05, 15:47    [1291077]     Ответить | Цитировать Сообщить модератору
 Re: Передача в MS SQL Server 2000 запроса, в котором присутствуют русские буквы  [new]
aleks2
Guest
Боюсь, здесь проблема QNX...

Скорее всего именно он не понимает русские буквы и корежит текст запроса.

Треба псмотреть в профайлере - чего там приходит на SQL?

Гадом буду - уже кракозябры.
1 фев 05, 15:47    [1291080]     Ответить | Цитировать Сообщить модератору
 Re: Передача в MS SQL Server 2000 запроса, в котором присутствуют русские буквы  [new]
Богдан Гоцкий
Member

Откуда: Львов
Сообщений: 504
aleks2
Боюсь, здесь проблема QNX...

Скорее всего именно он не понимает русские буквы и корежит текст запроса.

Треба псмотреть в профайлере - чего там приходит на SQL?

Гадом буду - уже кракозябры.

Так в первом посте же черным по белому написано, что на седьмом скуле все было ОК. Я думаю шо скорее всего - проблема в не том колэйшне который был на седьмом скуле.
1 фев 05, 15:53    [1291110]     Ответить | Цитировать Сообщить модератору
 Re: Передача в MS SQL Server 2000 запроса, в котором присутствуют русские буквы  [new]
ShurikEv
Member

Откуда: Россия, Новосибирск
Сообщений: 122
collation сервера и полей один и тот же - Cyrrilic_General_CI_AS.
aleks2
Треба псмотреть в профайлере - чего там приходит на SQL?

Это как?
1 фев 05, 16:13    [1291202]     Ответить | Цитировать Сообщить модератору
 Re: Передача в MS SQL Server 2000 запроса, в котором присутствуют русские буквы  [new]
ShurikEv
Member

Откуда: Россия, Новосибирск
Сообщений: 122
[quot Богдан Гоцкий ]Collation nvarchar полей в базе по идее (если вы ничего не трогали) [quot]
А это можно как-то изменить?
1 фев 05, 16:17    [1291229]     Ответить | Цитировать Сообщить модератору
 Re: Передача в MS SQL Server 2000 запроса, в котором присутствуют русские буквы  [new]
Богдан Гоцкий
Member

Откуда: Львов
Сообщений: 504
ShurikEv
А это можно как-то изменить?

Если разрешить редактирование системных таблиц и руками залезть в syscolumns то можно...
Касаясь вашей проблемы, помнится мне что в 2000-м скуле для совместимости с седьмым присутствуют колэйшны, названия которых начинаются с SQL_... Попробуйте разрешить редактирование системных таблиц, руками залезть в syscolumns и изменить колэйшн нужной колонки например на SQL_Latin1_General_CP1251_CI_AS
Есть вероятность что выбрав явно колэйшн с нужной кодовой страницей вы решите проблему
1 фев 05, 16:50    [1291443]     Ответить | Цитировать Сообщить модератору
 Re: Передача в MS SQL Server 2000 запроса, в котором присутствуют русские буквы  [new]
ShurikEv
Member

Откуда: Россия, Новосибирск
Сообщений: 122
Богдан Гоцкий
Касаясь вашей проблемы, помнится мне что в 2000-м скуле для совместимости с седьмым присутствуют колэйшны, названия которых начинаются с SQL_... Попробуйте разрешить редактирование системных таблиц, руками залезть в syscolumns и изменить колэйшн нужной колонки например на SQL_Latin1_General_CP1251_CI_AS
Есть вероятность что выбрав явно колэйшн с нужной кодовой страницей вы решите проблему

Залез я в эти колэшины :) и чуть не помер - их там ОЧЕНЬ много :) Ну насколько я понял, меня интересуют только Cyrillic_General и Latin1_General.
У них очень много разновидностей, а вот какую использовать, я как-то не пойму:

CaseSensitivity
CI - specifies case-insensitive
CS - specifies case-sensitive
AccentSensitivity
AI - accent case-insensitive
AS - accent case-sensitive
KanatySensitivity
Omitted specifies CI, KS - kanatype-sensitivity
WidthSensitivity
Omitted specifies CI, WS - case-sensitivity
BIN
Specifies the binary sort order is ti be used

Есть многообразие их сочетаний: CI_AL, CI_AL_KS, CI_AL_KS_WS и тд. Подскажите какая из них для чего. Что вообще значат эти обозначения?
Использовал SQL_Latin1_General_CP1251_CI_AS и SQL_Latin1_General_CP1251_CS_AI. Не помогло :(
Мне еще кажется, что это зависит от типа поля, в которое заношу строку. Тоже, какую брать: char, ncar, nvarchar, text, ntext...? Если учесть, что строка приходит в ДОС-формате или ASCII.
28 фев 05, 16:12    [1350039]     Ответить | Цитировать Сообщить модератору
 Re: Передача в MS SQL Server 2000 запроса, в котором присутствуют русские буквы  [new]
ShurikEv
Member

Откуда: Россия, Новосибирск
Сообщений: 122
В качестве дополнения: передаю в SQL-запросе строку "Байд", что в 16-ричном формате выглядет так "\х81\хА0\хА9\хА4", а сохроняется она в таблице в следующем виде: "\х3F\xFF\x63\FD" (скопировал текст из таблицы в текстовый редактор и наоборот). Налицо, какая-то конвертация. Какая тут может быть зависимость? Что-то прибавлется, сдвигается? Что за кодировка то такая, или что за таблица символов?
28 фев 05, 17:41    [1350420]     Ответить | Цитировать Сообщить модератору
 Re: Передача в MS SQL Server 2000 запроса, в котором присутствуют русские буквы  [new]
Богдан Гоцкий
Member

Откуда: Львов
Сообщений: 504
Если интересно, то написал небольшой скриптец, который показывает как влияют различные колэйшны на строку "Байд"
create table #t1 (f1 varbinary(30), col nvarchar(100))
declare @col_name nvarchar(100), @sql nvarchar(4000)
declare cur cursor for
select name from ::fn_helpcollations()

open cur
fetch cur into @col_name
while @@fetch_status = 0 begin
	select @sql = N'select cast(''Байд'' COLLATE '
	select @sql = @sql + @col_name
	select @sql = @sql + N' as varbinary), '''
	select @sql = @sql + @col_name
	select @sql = @sql + ''''
	insert into #t1
	exec sp_executesql @sql
	fetch cur into @col_name
end
close cur
deallocate cur

select *, cast(f1 as varchar(4)) from #t1
мож поможет...

Ну а касаясь вашей проблемы, то копаем дальше... интересно что профайлер показывает (уж не кракозабры ли уже там (см. пост от aleks2))???
1 мар 05, 12:02    [1352008]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить