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

Откуда: Moscow
Сообщений: 103
Доброго времени суток!

На одном из серверов столкнулся с такой проблемой.
Делаю (из SSMS) такой несложный запрос:

declare @d varchar(50) 
set @d = '%дизайн%' 
print @d 

получаю:
%??????%


На других серверах - всё ОК

select @@VERSION 

Microsoft SQL Server 2012 (SP1) - 11.0.3412.0 (X64) 
        Mar  2 2014 01:25:09 
        Copyright (c) Microsoft Corporation 
        Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) 

COLLATION: SQL_Latin1_General_Pref_CP1_CI_AS


Подозрение падает на COLLATION (других серверах - стандартная кириллическая кодировка)

Кто-нибудь сталкивался?

Как в подобном случае из-под SSMS найти строки (с кириллицей) по лайку?
29 май 14, 20:30    [16094326]     Ответить | Цитировать Сообщить модератору
 Re: Странности с кириллицей  [new]
serpentariy
Member

Откуда:
Сообщений: 265
k700,
declare @d nvarchar(50) 
set @d = N'%дизайн%' 
print @d 
И если вы ищете строки с кирилицей в полях типа varchar, а не nvarchar, то у вас там знаки вопроса
29 май 14, 20:52    [16094389]     Ответить | Цитировать Сообщить модератору
 Re: Странности с кириллицей  [new]
k700
Member

Откуда: Moscow
Сообщений: 103
serpentariy,

это первое, что пришло мне в голову.
результат - тот же!
30 май 14, 08:15    [16095273]     Ответить | Цитировать Сообщить модератору
 Re: Странности с кириллицей  [new]
Glory
Member

Откуда:
Сообщений: 104760
k700
это первое, что пришло мне в голову.
результат - тот же!

Вы ошибаетесь. Или делаете не так, как показано
30 май 14, 09:11    [16095371]     Ответить | Цитировать Сообщить модератору
 Re: Странности с кириллицей  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
SSMS выполняете локально на сервере? Шрифт проверяли?
30 май 14, 12:00    [16096425]     Ответить | Цитировать Сообщить модератору
 Re: Странности с кириллицей  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
DECLARE	@Test TABLE (
	Col0 VarChar(256) COLLATE Cyrillic_General_CI_AS
,	Col1 VarChar(256) COLLATE SQL_Latin1_General_Pref_CP1_CI_AS
,	Col2 NVarChar(256) COLLATE SQL_Latin1_General_Pref_CP1_CI_AS
)
INSERT	@Test VALUES (N'%дизайн%',N'%дизайн%',N'%дизайн%')
INSERT	@Test VALUES ('%дизайн%','%дизайн%','%дизайн%')

SELECT * FROM @Test
Server 1
Col0Col1Col2
%дизайн%%??????%%дизайн%
%??????%%??????%%??????%

Server 2
Col0Col1Col2
%дизайн%%??????%%дизайн%
%дизайн%%??????%%дизайн%
30 май 14, 12:06    [16096482]     Ответить | Цитировать Сообщить модератору
 Re: Странности с кириллицей  [new]
o-o
Guest
Mnior,

а зачем 2 сервера в эксперименте?
там, где Server1, код выполнен в базе с некириллическим коллэйшеном.
а где в Вашем примере Server2, -- выполнено в контексте "кириллической" базы.
30 май 14, 13:35    [16097233]     Ответить | Цитировать Сообщить модератору
 Re: Странности с кириллицей  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
o-o,

k700
Доброго времени суток!

На одном из серверов ...
Как бэ ближе к ТС.

o-o
там, где Server1, код выполнен в базе с некириллическим коллэйшеном.
Но я могу тоже придраться. Скрипт целиком на одной базе:
DECLARE	@Test TABLE (
	Col0 VarChar(256)
,	Col1 NVarChar(256)
)
INSERT	@Test VALUES (N'%дизайн%',N'%дизайн%')
INSERT	@Test VALUES ('%дизайн%','%дизайн%')

CREATE TABLE #Test (
	Col0 VarChar(256)
,	Col1 NVarChar(256)
)
INSERT	#Test VALUES (N'%дизайн%',N'%дизайн%')
INSERT	#Test VALUES ('%дизайн%','%дизайн%')

SELECT * FROM @Test
SELECT * FROM #Test

DROP TABLE #Test;
Col0Col1
%??????%%дизайн%
%??????%%??????%
Col0Col1
%дизайн%%дизайн%
%??????%%??????%


И можно придумывать сколько угодно, что же в реальности запускает ТС у себя.
Теперь понятно?
А, ещё можно предположить что разворачивается одна и та же база. При этом чаще одни и те же исходники приводят к одному и тому же. Или везде колейшин базы соврадает, или колейшин базы совпадает с серверным.
Ситуация что у серверов одинаковый колейшин, но базы с разными - наименее вероятен.
31 май 14, 02:40    [16100254]     Ответить | Цитировать Сообщить модератору
 Re: Странности с кириллицей  [new]
o-o
Guest
Mnior,

а я не про ТС (ему ответили уже про то, как получить гарантированную кириллицу),
а про Ваш конкретный скрипт.
не про второй, приведенный уже после моего ответа (где, кстати, как раз и участвуют 2 коллэйшена 2ух разных баз: текущей(@Test collation) и tempdb(#Test collation)), а про первый.
чтобы его гарантированно воспроизвести, нужны 2 базы: с кириллическим и некириллическим коллейшенами,
при этом коллэйшены серверов могут быть любыми.
обратное неверно: Ваш скрипт, запущенный на 2ух серверах с разными коллэйшенами,
но в базах с одинаковым, не даст 2 различных результата
31 май 14, 20:25    [16101438]     Ответить | Цитировать Сообщить модератору
 Re: Странности с кириллицей  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
o-o
а я не про ТС (ему ответили уже про то, как получить гарантированную кириллицу),
а про Ваш конкретный скрипт.
1. А не надо рассматривать мой конкретный скрипт отдельно от топика.
2. Ему как раз фигово ответили, и я уточнил, просто и наглядно, так что он мог тупо вставить и увидеть и не мучать остальных.
o-o
не про второй, приведенный уже после моего ответа
Вы думаете что говорите? Как можно писать о посте в прошедшем времени в нём самом же?! Притом словно на него уже есть ответ.
o-o
(где, кстати, как раз и участвуют 2 коллэйшена 2ух разных баз
1. Это вы мне говорите или ТС? Или вы думаете что я думаю что вы этого не знаете?
ТС это фиолетово, ибо у него базы на 2х разных серверах.

2. "кстати" и "участвуют" это ничего чёткого и понятного.
Если вы хотели уточнить так бы и сказали:
Колейшин базы жёстко определяют колешин строковых переменных и констант, в запущенных батчах/команд в её окружении.
Колейшин базы также определяет колейшен по умолчанию для строковых колонок.
Колейшин сервера определяет колейшен по умолчанию для создаваемых в ней баз, особенно системных.
o-o
чтобы его гарантированно воспроизвести, нужны 2 базы
Чтобы объяснить человеку нужно наиболее близкие к его ситуации вещи.
Вот теперь объясните это ТС так, что нужно запускать на разных базах, но не упоминайте при этом солово "сервер". (те две базы, ну те что у вас на разных серверах)
Зачем всё усложнять?
o-o
при этом коллэйшены серверов могут быть любыми.
Ваш аргумент может разбиться об этот пост 16095273.
На фразе "результат - тот же!"

o-o, и почитайте на досуге Беклемишева. :)
1 июн 14, 02:03    [16101941]     Ответить | Цитировать Сообщить модератору
 Re: Странности с кириллицей  [new]
o-o
Guest
+
Mnior
o-o
не про второй, приведенный уже после моего ответа
Вы думаете что говорите? Как можно писать о посте в прошедшем времени в нём самом же?! Притом словно на него уже есть ответ.


только на одно отвечу, остальное даже читать лень.
есть хорошее русское слово, Вас описывающее, но я так не выражаюсь
обращаю Ваше внимание на то, что любой "пост" в теме -- это ответ.
ибо сама кнопка, на к-ую вы жмете, чтобы запостить ответить, зовется именно "ответить".
...но продолжайте цепляться к словам сколько душе Вашей угодно
2 июн 14, 01:16    [16103934]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить