Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
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] Ответить | Цитировать Сообщить модератору |
HandKot Member Откуда: Sergiev Posad Сообщений: 3015 |
а если так написатьselect * from table where title like N'%тест%' ? |
13 сен 12, 14:09 [13157802] Ответить | Цитировать Сообщить модератору |
Aysvel Member Откуда: Сообщений: 38 |
HandKot, а так понимает) так в чем же дело, что ж теперь писать постоянно добавления типа "N" |
13 сен 12, 14:10 [13157815] Ответить | Цитировать Сообщить модератору |
HandKot Member Откуда: Sergiev Posad Сообщений: 3015 |
Без префикса N строка будет преобразована в установленную по умолчанию кодовую страницу базы данных. При этом некоторые символы могут неверно определиться. так что лучше писать видать у вас SSMS пработает с другой кодировкой, а где это устанавливается я не знаю |
13 сен 12, 14:17 [13157884] Ответить | Цитировать Сообщить модератору |
Aysvel Member Откуда: Сообщений: 38 |
HandKot, в любом случае, спасибо за ответ. Если кто-то знает какие настройки нужно произвести, чтобы работало без "N" - прошу написать, тема по прежнему актуальна. |
13 сен 12, 14:24 [13157947] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
Иначе неустойчивый код получится (говнокод). И для юникода всегда применять функции NCHAR(), UNICODE() и т.д, а не CHAR(), ANSI() и т.д. |
||
13 сен 12, 15:10 [13158529] Ответить | Цитировать Сообщить модератору |
Aysvel Member Откуда: Сообщений: 38 |
iap, Какие функции?? о чем вы говорите, выше описано - кириллица. 2 года все работало нормально и понимал скул кодировку. А теперь при обновлении данных например: update table set title = 'тест' where id = 1234 скул сохраняет данные в виде "????" для этой позиции. Это же не нормально. Не нужно никаких было писать => N"..." система не на юникоде, не utf-8!!! а win-1251 - киррилица Это где-то слетела настройка, или обновления скула привели к подобной проблеме. |
13 сен 12, 15:16 [13158605] Ответить | Цитировать Сообщить модератору |
Бородин Андрей 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] Ответить | Цитировать Сообщить модератору |
Бородин Андрей Member Откуда: Сообщений: 4 |
В случае если поле не юникод |
13 сен 12, 15:36 [13158866] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Там максимум потеря при сохранении файла. В остальном провайдер должен правильно транслировать.
Странный баг. Опять индусы? |
||||
13 сен 12, 15:37 [13158875] Ответить | Цитировать Сообщить модератору |
Aysvel Member Откуда: Сообщений: 38 |
Mnior, базе, на другом сервере, на котором тот же скул стоит. |
13 сен 12, 15:40 [13158914] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Бородин Андрейf1 LIKE Convert(VarChar,N'AA%') ![]() |
13 сен 12, 15:41 [13158925] Ответить | Цитировать Сообщить модератору |
Aysvel Member Откуда: Сообщений: 38 |
Aysvel, кстати говоря, php работая с этой же базой сохраняет все успешно в кириллице без всяких N"...", правда указывается шапка header("Content-type: text/html; charset=windows-1251"); |
13 сен 12, 15:42 [13158948] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
Наверняка какой нибудь NVARCHAR(...) |
||
13 сен 12, 15:47 [13158995] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
|
||
13 сен 12, 15:48 [13159011] Ответить | Цитировать Сообщить модератору |
Aysvel Member Откуда: Сообщений: 38 |
iap, поле именно varchar, было описано в начале вопроса |
13 сен 12, 15:57 [13159111] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
У меня оба запроса возвращают одну и ту же строку, разве должно быть не так?
Безусловно, можно подобрать настройки компа и сиквела, чтоб работало, но не каждая компания захочет плодить ветки настроек в парке серверов, это будет просто поводом потихоньку искать замену такому поставщику (или такому прогпраммисту). В настройках нужно смотреть на дефаултный язык логина в сиквеле и кодовую страницу для неюникодных символов в виндах. |
||||||
13 сен 12, 15:59 [13159135] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Aysvel Member Откуда: Сообщений: 38 |
"У меня оба запроса возвращают одну и ту же строку, разве должно быть не так?" - совершенно верно, так и должно быть, и без N и с ним одинаково, при равных прочих условиях правильно настроенных настроек, коих не так и много.. Считаю не нормально, когда нужно добавлять для НЕ ЮНИКОДОВЫХ полей дополнительно "N" для тестирования задач например.... |
13 сен 12, 16:03 [13159167] Ответить | Цитировать Сообщить модератору |
Aysvel Member Откуда: Сообщений: 38 |
alexeyvg, логин поменял на - russion с english - не помогло |
13 сен 12, 16:06 [13159198] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Получаются провайдер с сервером не может договорится. Получается настройки вянды на которой этот скуль стоит изменились, но как от этого зависит? ![]() По мне, так работать должно на унике, а константы (и переменные) должны транслироваться в нужную кодировку на сервере. Но видимо на самом деле всё вывернуто до немагу. =========================================================== DECLARE @tmp table ( Col1 VarChar(250) COLLATE Cyrillic_General_CI_AS ,Col2 VarChar(250) COLLATE Japanese_CI_AS ,Col3 NVarChar(250) ) INSERT @tmp VALUES SELECT * FROM @tmp
PS: sql.ru не понимает уникод |
|||||||||
13 сен 12, 16:06 [13159201] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
Тогда действительно удивительно. |
||
13 сен 12, 16:08 [13159213] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Всё нормально. SELECT DataBasePropertyEx(DB_Name(),'Collation') GO ALTER DATABASE <MyDB> COLLATE Cyrillic_General_CI_AS GO |
||
13 сен 12, 16:12 [13159255] Ответить | Цитировать Сообщить модератору |
Aysvel Member Откуда: Сообщений: 38 |
iap, К сообщению приложен файл. Размер - 78Kb |
13 сен 12, 16:12 [13159260] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
![]() |
||
13 сен 12, 16:15 [13159286] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |