Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2015, 16:34   #1
SQLPowerUser
Форумчанин
 
Аватар для SQLPowerUser
 
Регистрация: 19.01.2015
Сообщений: 158
Вопрос ODBC Microsoft MS SQL Server 2008. Кодировка

Тема довольно популярная в гугле, но нормальное решение находил для MySQL, а у меня MS SQL. Lazarus-1.4.2, fpc-2.6.4 (последние версии на сегодня) Рабочая станция Windows 7 64 bit.
У самой базы коллейшн Cyrillic_General_CI_AS, тип поля – обычный varchar (не юникод)
Выборки через ODBC идут быстро, но русские буквы в Memo отображаются знаками вопросов ????? (в грид выводить не нужно) Где-то нашёл, что для MSSQL, Unicode это значит USC-2 (он же UTF16 little endian), он и хранит и отдает юникодные строки в этом формате.
Добавлял параметр charset=USC-2, не помогло. charset=UTF-8 также без результата. Пробовал Regional=Yes и LANGUAGE=Russian, а также выводил в разные Memo c разными кастами (AsVariant и AsWideString)
Код:
Memo1.Lines.Add(SQLQuery1.Fields[0].AsVariant);
Memo2.Lines.Add(SQLQuery1.Fields[0].AsString);
Memo3.Lines.Add(SQLQuery1.Fields[0].AsWideString);
Пробовал и через SQL Native Client 2008 и на сервере делал явный cast(MyField as Nvarchar(500)). Не получается. В принципе, решить можно через AnsiToUtf8(SQLQuery1.Fields[0].AsString), но хотелось бы напрямую, без дополнительных преобразований.

Последний раз редактировалось SQLPowerUser; 05.10.2015 в 16:37.
SQLPowerUser вне форума Ответить с цитированием
Старый 05.10.2015, 17:33   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Для лазаруса это норм. Не стесняйся юзать AnsiToUtf8.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.10.2015, 17:41   #3
SQLPowerUser
Форумчанин
 
Аватар для SQLPowerUser
 
Регистрация: 19.01.2015
Сообщений: 158
По умолчанию

ОК. Спасибо!
SQLPowerUser вне форума Ответить с цитированием
Старый 05.10.2015, 17:46   #4
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
У самой базы коллейшн Cyrillic_General_CI_AS, тип поля – обычный varchar (не юникод)
если заменить в таблице поля varchar на NVARCHAR ???

Цитата:
Сообщение от Stilet Посмотреть сообщение
Для лазаруса это норм. Не стесняйся юзать AnsiToUtf8.
Тоже не знал, Спасибо Но зачем лазера если есть Delphi
Изображения
Тип файла: jpg Varchar.jpg (72.5 Кб, 54 просмотров)
Тип файла: jpg nvarchar.jpg (58.0 Кб, 71 просмотров)

Последний раз редактировалось Stilet; 05.10.2015 в 18:49.
xxbesoxx вне форума Ответить с цитированием
Старый 05.10.2015, 18:07   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Но зачем лазера если есть Delphi
Тут как бэ наооборот. Зачем дорогой и монстроузный Делфи, когда есть Лазарус и КодеТайфун нахаляву и официально?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 05.10.2015, 18:09   #6
SQLPowerUser
Форумчанин
 
Аватар для SQLPowerUser
 
Регистрация: 19.01.2015
Сообщений: 158
По умолчанию

>>> если заменить в таблице поля varchar на NVARCHAR ???
Я это тоже пробовал, не помогает... Сейчас тест на скорость забабахал, AnsiToUtf8 работает быстро, проигрыш где-то в 50 ms на 100 тыс. записей с выходной строкой 7 Мб, почти нет проигрыша.

>>> Но зачем лазера если есть Delphi
Чтоб под Линукс компилить, да и бесплатный
SQLPowerUser вне форума Ответить с цитированием
Старый 05.10.2015, 18:21   #7
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Utkin Зачем дорогой и монстроузный Делфи, когда есть Лазарус и КодеТайфун нахаляву
1) Визуальные компонентов больше , Дела в привычке
2) "нахаляву" или "не нахаляву" обсудить не буду, так как правило не нарушаем .
3) " официально " Знайте мне документ еще не кто не попросил , Если попросить .! выкрутимся как нибудь
xxbesoxx вне форума Ответить с цитированием
Старый 05.10.2015, 18:27   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
1) Визуальные компонентов больше , Дела в привычке
Да ладно, установи себе Коде Тайфун сначала, так то у него фаллос длинней.
Цитата:
2) "нахаляву" или "не нахаляву" обсудить не буду, так как правило не нарушаем .
Ну вот и я не нарушаю правило - не платить за то, что можно взять бесплатно. ФриПаскаль самое оно и есть.
Цитата:
3) " официально " Знайте мне документ еще не кто не попросил , Если попросить .! выкрутимся как нибудь
Знаете, когда могут попросить будет поздно.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 05.10.2015, 18:34   #9
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Utkin Ну вот и я не нарушаю правило - не платить за то, что можно взять бесплатно.
Я тоже не нарушаю , Не плачу на то что можно скачать бесплатно ...
Цитата:
Utkin Знаете, когда могут попросить будет поздно.
Попросить когда я разбогатею из моего проекта .... А так я обычный человек ( Не компания, Не фирма ) еще не разбогател и если попросить .! дадим взятку на чай можно да ?
или сразу буду перепостить код на Laserus е

Последний раз редактировалось xxbesoxx; 05.10.2015 в 18:41.
xxbesoxx вне форума Ответить с цитированием
Старый 05.10.2015, 18:53   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
зачем лазера если есть Delphi
Современное Делфи - это как на шагающем экскаваторе копать огород.
Цитата:
или сразу буду перепостить код на Laserusе
Не выйдет )
Цитата:
проигрыш где-то в 50 ms на 100 тыс. записей с выходной строкой 7 Мб, почти нет проигрыша.
На Сиквеле, если бы делал, проигрыш был бы почти такой же, так что шило на мыло.
Так то вообше можно попробовать один вариант: Сделать новую БД с юникодовой локалью и nchar-полями и туда пересадить данные. Но это морок.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Microsoft SQL Server Management Studio 2008 Guren Помощь студентам 2 09.01.2013 07:16
Microsoft SQL Server Management Studio 2008 Guren SQL, базы данных 0 04.01.2013 14:25
VS C# 2008 и Microsoft SQL Server 2005 (Ошибка 26) Fedosss Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 0 02.07.2012 16:40
Ado + Microsoft sql Server 2008 crash1986 БД в Delphi 5 06.07.2011 14:47
MS SQL Server 2008 и Visual Studio 2008 C# (Как работать с БД?) cherw9!40k Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 2 14.01.2010 20:51