Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Не правильный Collation или еще что? Помогите разобраться  [new]
Slavalp93
Member

Откуда:
Сообщений: 10
Делаю простенький запрос вида:
Select * From Im_Fields Where F_LONGNAME = 'БАЗА'

В результате - пусто. Хотя в данном поле есть значения 'БАЗА'. Предположил, что нужно указать явно colletion. Вот, что дает запрос к INFORMATION_SCHEMA.COLUMNS:
SELECT CHARACTER_SET_NAME, COLLATION_NAME
FROM [Imbase_integration].INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'IM_FIELDS' and COLUMN_NAME='F_LONGNAME';

CHARACTER_SET_NAME = cp1251
COLLATION_NAME=Cyrillic_General_CS_AS
И делаю теперь так:
Select * From Im_Fields Where F_LONGNAME = 'БАЗА' COLLATE Cyrillic_General_CS_AS

Но результат все также пустой. Подскажите как выбрать значения с фильтром по такому полю?
9 апр 14, 13:25    [15855651]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
iap
Member

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

может, в таблице 'БАЗА' хранится не только строчными буквами?
'База', например. Cyrillic_General_CS_AS - это ж, всё-таки, Case Sensitive (..._CS_...) COLLATE.

F_LONGNAME - какого типа?
9 апр 14, 13:29    [15855682]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
SELECT * FROM Im_Fields WHERE F_LONGNAME = 'БАЗА' COLLATE Cyrillic_General_CI_AI;
что вернёт?
9 апр 14, 13:30    [15855693]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
Slavalp93
Member

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

Тоже пусто
9 апр 14, 13:38    [15855756]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
Slavalp93
Member

Откуда:
Сообщений: 10
iap,
F_LONGNAME - какого типа?
varchar(64)
9 апр 14, 13:40    [15855772]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Еще раз: F_LONGNAME - какого типа?
9 апр 14, 13:40    [15855774]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
Slavalp93
Хотя в данном поле есть значения 'БАЗА'.
Откуда знаете?

И тип поля почему скрываете?
Я же не зря, наверно, спросил.
9 апр 14, 13:40    [15855775]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Slavalp93
iap,
F_LONGNAME - какого типа?
varchar(64)
Тогда сравните бинарные значения (cast as varbinary) в поле и вашего литерала. Может оказаться, что там буква A ни разу не русская.
9 апр 14, 13:41    [15855788]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
Гавриленко Сергей Алексеевич
Slavalp93
iap,
F_LONGNAME - какого типа?
varchar(64)
Тогда сравните бинарные значения (cast as varbinary) в поле и вашего литерала. Может оказаться, что там буква A ни разу не русская.
По крайней мере сюда запостил всё русское
Я проверил
9 апр 14, 13:43    [15855801]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
iap
Гавриленко Сергей Алексеевич
пропущено...
Тогда сравните бинарные значения (cast as varbinary) в поле и вашего литерала. Может оказаться, что там буква A ни разу не русская.
По крайней мере сюда запостил всё русское
Я проверил
Может, в таблице хранится другое написание...
9 апр 14, 13:44    [15855805]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
Slavalp93
Member

Откуда:
Сообщений: 10
iap
iap
пропущено...
По крайней мере сюда запостил всё русское
Я проверил
Может, в таблице хранится другое написание...

declare @field varchar(64) = (SELECT F_LONGNAME  FROM [base].[dbo].[IM_FIELDS] where F_KEY = 11)
if @field = 'БАЗА'
	print 'ok'
else
	print 'no'

Пишет ok - значит все-таки правильное написание. И
if CAST(@field as varbinary) = CAST('БАЗА' as varbinary)
тоже ok
А если теперь мой @field подставить в условие where - то пусто:
Select * From [base].[dbo].[IM_FIELDS] where F_LONGNAME = @field

Что может быть еще?
9 апр 14, 14:03    [15855943]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
iap
Member

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

а почему не просто
SELECT F_LONGNAME  FROM [base].[dbo].[IM_FIELDS] where F_KEY = 11
?
Даже ещё лучше: что возвращает
SELECT QUOTENAME(F_LONGNAME)  FROM [base].[dbo].[IM_FIELDS] where F_KEY = 11
?
А так выдаст что-нибудь:
Select * From [base].[dbo].[IM_FIELDS] where F_LONGNAME = (SELECT T.F_LONGNAME  FROM [base].[dbo].[IM_FIELDS] T where T.F_KEY = 11)
?
9 апр 14, 14:28    [15856124]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
o-o
Guest
поди сама база с регистрозависимым коллэйшеном и в ней 2 таблицы: Im_Fields и IM_FIELDS
покажите результат
select DATABASEPROPERTYEX('base', 'Collation')
9 апр 14, 14:32    [15856152]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
iap
Member

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

а действительно, почему Вы имена одних и тех же объектов пишете буквами с разным регистром?
Неряшливо и непрофессионально. IMHO.
Как, всё-таки, хорошо, что у нас бинарный COLLATE! Дисциплинирует!
9 апр 14, 14:38    [15856202]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
Slavalp93
А если теперь мой @field подставить в условие where - то пусто:
Select * From [base].[dbo].[IM_FIELDS] where F_LONGNAME = @field
Что может быть еще?
Неправильно подставляете, или где то напутано в экспериментах. Или может в "БАЗА" буква А англйская. Аккуратно надо, копированием, и сделать полный репро.

Типа того:
declare @field varchar(64) = (SELECT F_LONGNAME  FROM [base].[dbo].[IM_FIELDS] where F_KEY = 11)

if @field = 'БАЗА'
	print 'ok'
else
	print 'no'
Select F_KEY From [base].[dbo].[IM_FIELDS] where F_LONGNAME = @field
SET @field = 'БАЗА'
Select F_KEY From [base].[dbo].[IM_FIELDS] where F_LONGNAME = @field
9 апр 14, 14:48    [15856275]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
o-o
поди сама база с регистрозависимым коллэйшеном и в ней 2 таблицы: Im_Fields и IM_FIELDS
Да там ещё и запрос с Im_Fields без владельца, ужос.
9 апр 14, 14:51    [15856306]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
Есть ещё вариант, что запросы выполняются в разных базах
9 апр 14, 14:54    [15856333]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
o-o
Guest
iap,

как минимум, коллэйшен ТС показал от таблицы в базе Imbase_integration,
а запрос выполняет в base,
ну или для форума подтер название базы.
короче, бардак во всем :)

надо будет топик переименовать в "1000 причин, по к-ым человек шарит в одной таблице,
думая при этом про другую, озадачивается сам и озадачивает других или ПОРЯДОК -- ПРЕЖДЕ ВСЕГО"
9 апр 14, 15:04    [15856428]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
aleks2
Guest
Slavalp93
Делаю простенький запрос вида:
Select * From Im_Fields Where F_LONGNAME = 'БАЗА'

В результате - пусто. Хотя в данном поле есть значения 'БАЗА'. Предположил, что нужно указать явно colletion. Вот, что дает
Но результат все также пустой. Подскажите как выбрать значения с фильтром по такому полю?


Как меня забавляют гуманитарии в программировании.
Оне так непосредственно обижаются на бездушный кремниевый механизм...
Выполните, доложите результаты
Select * From Im_Fields Where F_LONGNAME like '%'
Select * From Im_Fields Where F_LONGNAME like 'Б%'
Select * From Im_Fields Where F_LONGNAME like 'б%'
Select * From Im_Fields Where F_LONGNAME like 'БА%'
Select * From Im_Fields Where F_LONGNAME like 'Ба%'
Select * From Im_Fields Where F_LONGNAME like 'бА%'
Select * From Im_Fields Where F_LONGNAME like 'ба%'

и прослезитесь...
9 апр 14, 15:09    [15856467]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
Slavalp93
Member

Откуда:
Сообщений: 10
Всем, кто откликнулся на мой вопрос.
Во-первых, прошу прощения за возможно не совсем правильную постановку вопроса. Я только начинающий в ms sql server.
Во-вторых, да, в первом посте я изменил название базы на base.
В-третьих, оказалось нужно привести значение 'БАЗА' к VARCHAR. Т.е. такие запросы работают:
Select * From [Imbase_integration].[dbo].[IM_FIELDS] Where F_LONGNAME = Convert(VarChar,'БАЗА')
или
Select * From [Imbase_integration].[dbo].[IM_FIELDS] Where F_LONGNAME = N'БАЗА'

Помогла ветка форума:
[url=]https://www.sql.ru/forum/969176/ms-sql-ne-ponimaet-kodirovku-kirillica-v-sql-server-management-studio[/url]

Всем спасибо и прошу прощения за свое ламерство.
9 апр 14, 15:39    [15856688]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
aleks2
Guest
Slavalp93
В-третьих, оказалось нужно привести значение 'БАЗА' к VARCHAR. Т.е. такие запросы работают:
Select * From [Imbase_integration].[dbo].[IM_FIELDS] Where F_LONGNAME = Convert(VarChar,'БАЗА')


Феерическая глупость.
9 апр 14, 15:48    [15856760]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
o-o
Guest
...а ведь просили коллэйшен базы показать

если у ТС база некириллическая + только то поле в таблице кириллица:
F_LONGNAME varchar(64) collate Cyrillic_General_CS_AS

то про вот это поверю, что сработало:
Select * From [Imbase_integration].[dbo].[IM_FIELDS] Where F_LONGNAME = N'БАЗА'

а вот это -- нет:
Select * From [Imbase_integration].[dbo].[IM_FIELDS] Where F_LONGNAME = Convert(VarChar,'БАЗА')
9 апр 14, 15:49    [15856776]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
Slavalp93
Member

Откуда:
Сообщений: 10
o-o,

Хотите верьте, хотите нет, но работают оба запроса.
Collation сервера: SQL_Latin1_General_CP1_CI_AS
Collation базы: Cyrillic_General_CI_AS
9 апр 14, 15:53    [15856816]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9169
Намучаетесь с временными таблицами... Переустановите сервер в соответствии с сортировкой базы.
9 апр 14, 16:10    [15856924]     Ответить | Цитировать Сообщить модератору
 Re: Не правильный Collation или еще что? Помогите разобраться  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
Владислав Колосов,

Collation сервера меняется без переустановки
9 апр 14, 16:22    [15857026]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить