Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 GROUP BY и юникод (UTF-8)  [new]
Andret
Member

Откуда: Киев
Сообщений: 84
По своей одной задачке, загрузил в SQL Server R2 базу экзонимов.
Её саму взял тут:
http://www.geopostcodes.com/GeoPC_Exonyms
Там она доступна в CSV и в кодировке UTF-8. Для информации сообщу что удачно загрузить удалось только посредством Access 2010.
В конце концов я получил в рабочей базе табличку из 3 колонок, две из которых типа nvarchar():
create table dbo.exonyms_acc (
	Country		Char(2),
	Name		nvarchar(100),
	Exonym		nvarchar(200)
)

Понятное дело, что следующим шагом я захотел добавить уникальный индекс.
Для этого попытался проверить, уникальны ли записи в таблице:
select	[country], [name], [exonyms], count(*) as cnt
from	Exonyms_acc
group by [country], [name], [exonyms]
having count(*) > 1

получил такой результат:
country name exonyms cnt
EH Western Sahara សាហារ៉ាខាងលិច 2
IN New Delhi ནེའུ་དིལ་ལིའི 2
KH Phnom Penh ក្រុងភ្នំពេញ 2
TW Liao-tzu 寮仔 2
ET Addis Ababa Adís Abeba - አዲስ አበባ 2
MN Ulaanbaatar ཝུ་ལན་བ་ཐུར 2
TW Hou-ts'o 後厝 2

Тут в место вопросов выводятся всякие экзотические символы.
geopostcodes опубликовал не уникальный справочник? Мне это показалось странным.
Попробовал отобрать эти записи вручную, и оказалось что эта операция не тривиальна!
SQL Managment Studio в редакторе национальные знаки отображал в квадратиках, а запрос ничего не возвращал. SQL Query Analyzer 2000 символы в редакторе отображал корректно, но запрос также ничего не возвращал. Пришлось написать запрос, значения фильтра которого присваивались программно. И! Сервер вернул по две на вид разные записи и с разным числом символов в поле exonyms!
Выходит, не смотря на юникод и тип nvarchar, в некоторых национальных кодировках group by сворачивает разные символы.
Получается, в этих экзотических языках некоторые символы считается как большие и маленькие, или около того буквы?
Думаю, с вещественным ключом у меня теперь ничего не получится.

Может кто-то из коллег тоже сталкивался с чем-то подобным, и посоветует лекарства?
7 дек 11, 15:07    [11722107]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY и юникод (UTF-8)  [new]
iap
Member

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

а максимальная длина Name и Exonym в файле CSV какая?
А то может, первые 100 символов одинаковы, а различаются какие-то следующие?
То есть, данные при заливке обрезались?
7 дек 11, 15:19    [11722225]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY и юникод (UTF-8)  [new]
Andret
Member

Откуда: Киев
Сообщений: 84
Я грузил в таблицу избыточную, ну а максимальная длина данных в полях:
name - 86
exonyms - 188
Так что с этим всё в порядке.
7 дек 11, 16:29    [11723069]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY и юникод (UTF-8)  [new]

Guest
приведите коллейшен базы в которой происходит работа.
коллейшен влияет на сравнение символьных полей
8 дек 11, 09:59    [11726829]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY и юникод (UTF-8)  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
UTF-8 это контейнер, а не юникод
8 дек 11, 10:08    [11726893]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить