Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
Aysvel
Member

Откуда:
Сообщений: 38
Уважаемые специалисты! Кто сталкивался!

В MS-SQL не понимает кодировку (кириллица) в SQL server management studio!

Простейший запрос типа:

select * from table
where title like '%тест%'

не выдает результатов если запрос написан кириллицей! Если латиницей или цифры - работает нормально

Поле "title" => varchar(255) и\или text

Кодировка в базе данных => Collation => Cyrillic_General_CI_AS
=> options => ansi null default

Причем в другой базе те же настройки и кириллица понимается сервером нормально.

перезагрузка сервера и MSSQL - не помогают! Запрос пишется в новом листе, не сохраненном типа "queries.sql"

В чем может быть проблема, как заставить SQL понимать кириллицу?? Неужели только переустановкой MSSQL??
13 сен 12, 14:07    [13157783]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3104
а если так написать
select * from table
 where title like N'%тест%'

?
13 сен 12, 14:09    [13157802]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
Aysvel
Member

Откуда:
Сообщений: 38
HandKot,

а так понимает) так в чем же дело, что ж теперь писать постоянно добавления типа "N"
13 сен 12, 14:10    [13157815]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3104
 Без префикса N строка будет преобразована в установленную по умолчанию кодовую страницу базы данных. При этом некоторые символы могут неверно определиться.

так что лучше писать
видать у вас SSMS пработает с другой кодировкой, а где это устанавливается я не знаю
13 сен 12, 14:17    [13157884]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
Aysvel
Member

Откуда:
Сообщений: 38
HandKot,

в любом случае, спасибо за ответ. Если кто-то знает какие настройки нужно произвести, чтобы работало без "N" - прошу написать, тема по прежнему актуальна.
13 сен 12, 14:24    [13157947]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
Aysvel
HandKot,

в любом случае, спасибо за ответ. Если кто-то знает какие настройки нужно произвести, чтобы работало без "N" - прошу написать, тема по прежнему актуальна.
Перед литеральными юникодными строками ВСЕГДА надо писать N.
Иначе неустойчивый код получится (говнокод).
И для юникода всегда применять функции NCHAR(), UNICODE() и т.д, а не CHAR(), ANSI() и т.д.
13 сен 12, 15:10    [13158529]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
Aysvel
Member

Откуда:
Сообщений: 38
iap,

Какие функции?? о чем вы говорите, выше описано - кириллица.
2 года все работало нормально и понимал скул кодировку. А теперь при обновлении данных например:

update table set title = 'тест' where id = 1234

скул сохраняет данные в виде "????" для этой позиции. Это же не нормально. Не нужно никаких было писать => N"..."

система не на юникоде, не utf-8!!! а win-1251 - киррилица

Это где-то слетела настройка, или обновления скула привели к подобной проблеме.
13 сен 12, 15:16    [13158605]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
Бородин Андрей
Member

Откуда:
Сообщений: 4
HandKot, не стоит указывать перед литералом N повлияет на конвертацию

if OBJECT_id('tempdb..#tmp') is not null drop table #tmp

create table #tmp (f1 varchar(32) primary key clustered, f2 varchar(255))

insert #tmp(f1, f2)
select
'AAAB', 'ASDFGFGHHJJJJK'
union all
select
'ABBB', 'ASDFGFGHHJJJJK'
union all
select
'ABBc', 'ASDFGFGHHJJJJK'
union all
select
'ABBd', 'ASDFGFGHHJJJJK'
union all
select
'ABBe', 'ASDFGFGHHJJJJK'
union all
select
'ABBf', 'ASDFGFGHHJJJJK'
union all
select
'ABBg', 'ASDFGFGHHJJJJK'
go
set showplan_text on
go
select * from #tmp where f1 like 'AA%'

select * from #tmp where f1 like N'AA%'
13 сен 12, 15:33    [13158826]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
Бородин Андрей
Member

Откуда:
Сообщений: 4
В случае если поле не юникод
13 сен 12, 15:36    [13158866]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6727
HandKot
видать у вас SSMS пработает с другой кодировкой, а где это устанавливается я не знаю
Ну клиент то .Net, там нет кодировки (всё уникод).
Там максимум потеря при сохранении файла. В остальном провайдер должен правильно транслировать.
Aysvel
Причем в другой базе те же настройки
Базе или сервере?

Странный баг. Опять индусы?
13 сен 12, 15:37    [13158875]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
Aysvel
Member

Откуда:
Сообщений: 38
Mnior,

базе, на другом сервере, на котором тот же скул стоит.
13 сен 12, 15:40    [13158914]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6727
Бородин Андрей
f1 LIKE Convert(VarChar,N'AA%')
13 сен 12, 15:41    [13158925]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
Aysvel
Member

Откуда:
Сообщений: 38
Aysvel,

кстати говоря, php работая с этой же базой сохраняет все успешно в кириллице без всяких N"...", правда указывается шапка

header("Content-type: text/html; charset=windows-1251");
13 сен 12, 15:42    [13158948]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
Aysvel
iap,

Какие функции?? о чем вы говорите, выше описано - кириллица.
2 года все работало нормально и понимал скул кодировку. А теперь при обновлении данных например:

update table set title = 'тест' where id = 1234

скул сохраняет данные в виде "????" для этой позиции. Это же не нормально. Не нужно никаких было писать => N"..."

система не на юникоде, не utf-8!!! а win-1251 - киррилица

Это где-то слетела настройка, или обновления скула привели к подобной проблеме.
При чём тут система, если Вам говорят о типе поля title?
Наверняка какой нибудь NVARCHAR(...)
13 сен 12, 15:47    [13158995]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
Aysvel
Aysvel,

кстати говоря, php работая с этой же базой сохраняет все успешно в кириллице без всяких N"...", правда указывается шапка

header("Content-type: text/html; charset=windows-1251");
А в профайлере как это выглядит?
13 сен 12, 15:48    [13159011]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
Aysvel
Member

Откуда:
Сообщений: 38
iap,

поле именно varchar, было описано в начале вопроса
13 сен 12, 15:57    [13159111]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32167
Бородин Андрей
HandKot, не стоит указывать перед литералом N повлияет на конвертацию
А почему не стоит, и что неправильного в результате?

У меня оба запроса возвращают одну и ту же строку, разве должно быть не так?

Aysvel
2 года все работало нормально и понимал скул кодировку. А теперь при обновлении данных например:
Это и называется:
iap
Иначе неустойчивый код получится (говнокод).
То есть когда программа работает только на компе у программиста, а на других - как повезёт.

Безусловно, можно подобрать настройки компа и сиквела, чтоб работало, но не каждая компания захочет плодить ветки настроек в парке серверов, это будет просто поводом потихоньку искать замену такому поставщику (или такому прогпраммисту).

В настройках нужно смотреть на дефаултный язык логина в сиквеле и кодовую страницу для неюникодных символов в виндах.
13 сен 12, 15:59    [13159135]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
Aysvel
Member

Откуда:
Сообщений: 38
Aysvel, SERVER PROFILER показывает лишь сам запрос

SQL:BatchStarting select * from [Reg_users].dbo.[table]
where title like '%тест%'
Microsoft SQL Server Management Studio - Query login 3916 115 2012-09-13 14:58:46.033
13 сен 12, 16:00    [13159142]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
Aysvel
Member

Откуда:
Сообщений: 38
"У меня оба запроса возвращают одну и ту же строку, разве должно быть не так?"

- совершенно верно, так и должно быть, и без N и с ним одинаково, при равных прочих условиях правильно настроенных настроек, коих не так и много.. Считаю не нормально, когда нужно добавлять для НЕ ЮНИКОДОВЫХ полей дополнительно "N" для тестирования задач например....
13 сен 12, 16:03    [13159167]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
Aysvel
Member

Откуда:
Сообщений: 38
alexeyvg,

логин поменял на - russion с english - не помогло
13 сен 12, 16:06    [13159198]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6727
Aysvel
на другом сервере, на котором тот же скул стоит.
Ха.
Получаются провайдер с сервером не может договорится. Получается настройки вянды на которой этот скуль стоит изменились, но как от этого зависит?
По мне, так работать должно на унике, а константы (и переменные) должны транслироваться в нужную кодировку на сервере.
Но видимо на самом деле всё вывернуто до немагу.
===========================================================
DECLARE @tmp table (
	 Col1	VarChar(250)	COLLATE Cyrillic_General_CI_AS
	,Col2	VarChar(250)	COLLATE Japanese_CI_AS
	,Col3	NVarChar(250)
)

INSERT	@tmp VALUES
(N'Тест テスト'
,N'Тест テスト'
,N'Тест テスト')
SELECT	*
FROM	@tmp
Col1Col2Col3
Тест ???Тест テストТест テスト

PS: sql.ru не понимает уникод
13 сен 12, 16:06    [13159201]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
Aysvel
iap,

поле именно varchar, было описано в начале вопроса
Упс! Пропустил.
Тогда действительно удивительно.
13 сен 12, 16:08    [13159213]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6727
Aysvel
 where title like N'%тест%'

а так понимает) так в чем же дело, что ж теперь писать постоянно добавления типа "N"
Твою ... Не заметил пост.

Всё нормально.
SELECT	DataBasePropertyEx(DB_Name(),'Collation')
GO
ALTER DATABASE <MyDB> COLLATE Cyrillic_General_CI_AS
GO
13 сен 12, 16:12    [13159255]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
Aysvel
Member

Откуда:
Сообщений: 38
iap,

К сообщению приложен файл. Размер - 78Kb
13 сен 12, 16:12    [13159260]     Ответить | Цитировать Сообщить модератору
 Re: MS-SQL не понимает кодировку (кириллица) в SQL server management studio!  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
Aysvel
iap,
Да я уже молчу...
13 сен 12, 16:15    [13159286]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить