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

Откуда:
Сообщений: 17
Юзаю PDO MSSQL через драйвер dblib. Используется это все в проекте на Yii

Использую для подключения такую строку:

dblib:host=host;dbname=db;charset=UTF-8

Так же в файле freetds.conf прописана кодировка так:

[global]
# TDS protocol version

tds version = auto
host = 192.168.33.59
client charset = utf-8
port = 1433

Однако все равно все без толку при получении данных из базы, они кракозябрами.
База в cp1251, проект на php в utf8 не конвертировать же все iconv?
7 авг 12, 17:07    [12976602]     Ответить | Цитировать Сообщить модератору
 Re: DBLIB и кодировка UTF8  [new]
Glory
Member

Откуда:
Сообщений: 104751
thekip
База в cp1251

Это вы collate так называете ?

thekip
проект на php в utf8 не конвертировать же все iconv?

MSSQL за вам тоже конвертацией заниматься не будет
7 авг 12, 17:14    [12976643]     Ответить | Цитировать Сообщить модератору
 Re: DBLIB и кодировка UTF8  [new]
thekip
Member

Откуда:
Сообщений: 17
Glory
Это вы collate так называете ?


Видимо, никогда особо не углублялся в базы данных.

Glory
MSSQL за вам тоже конвертацией заниматься не будет

К примеру в MySQL есть возможность "на лету" конвертировать входящие - исходящие данные.
Знаю что такого нет в MSSQL, но это должно быть в драйвере, вот выдержка из куска конфигурационного файла freetds.conf


client charset:
Makes FreeTDS use iconv to convert to and from the specified character set from UCS-2 in TDS 7.0 or above. FreeTDS uses iconv to convert all character data, so there's no need to match the server's charset to insert any characters the server supports.

Как я понял из этого, что именна эта настройка должна мне позволить пользоваться базой в нативной для моей системы кодировке, не?
7 авг 12, 17:21    [12976680]     Ответить | Цитировать Сообщить модератору
 Re: DBLIB и кодировка UTF8  [new]
Glory
Member

Откуда:
Сообщений: 104751
thekip
Как я понял из этого, что именна эта настройка должна мне позволить пользоваться базой в нативной для моей системы кодировке, не?

Еще раз. Сервер ничего не кодирует и не перекодирует.
Все, что ему передали, он вернет вам ровно в том же виде, в каком получил.
Т.е. прежде, чем говорить, что "при получении данных из базы, они кракозябрами", нужно убедиться, что серверу были переданы "не кракозябры"
7 авг 12, 17:24    [12976700]     Ответить | Цитировать Сообщить модератору
 Re: DBLIB и кодировка UTF8  [new]
thekip
Member

Откуда:
Сообщений: 17
Glory
Еще раз. Сервер ничего не кодирует и не перекодирует.
Все, что ему передали, он вернет вам ровно в том же виде, в каком получил.
Т.е. прежде, чем говорить, что "при получении данных из базы, они кракозябрами", нужно убедиться, что серверу были переданы "не кракозябры"


Кэп.

Если читать вдумчиво мой ответ, то из него становится ясно, что я НЕ возлагаю это задачу на сервер, но уповаю на то что это МОЖЕТ делать драйвер базы данных.

То что приходит ко мне из базы, приходит в cp1251 и это ясно и понятно.

Другой вопрос, нет что ли на уровне драйвера какой либо реализации того что бы данные кодировались на лету из одной кодировки в другую, как к примеру это происходит в mysql?

Щас вдумчивее прочитал описание конфига "client charset", и я так понимаю что эта опция все же предполагает кодировку не при извлечении из базы, а при отдаче данных.

FreeTDS uses iconv to convert all character data, so there's no need to match the server's charset to insert any characters the server supports.


Вообщем пока конвертирую сам с помощью iconv
7 авг 12, 17:59    [12976920]     Ответить | Цитировать Сообщить модератору
 Re: DBLIB и кодировка UTF8  [new]
Glory
Member

Откуда:
Сообщений: 104751
thekip
Другой вопрос, нет что ли на уровне драйвера какой либо реализации того что бы данные кодировались на лету из одной кодировки в другую, как к примеру это происходит в mysql?

Вы сами понимаете, что пишите ?
То у вас "что ли на уровне драйвера какой либо реализации", то "это происходит в mysql"
Вы уж определитесь, где вы собрались конертировать данные
7 авг 12, 18:09    [12976982]     Ответить | Цитировать Сообщить модератору
 Re: DBLIB и кодировка UTF8  [new]
thekip
Member

Откуда:
Сообщений: 17
Сейчас мы говорим об MSSQL так?

Вы говорите что MSSQL это не умеет делать, так? Значит здесь определились - сама база конвертить не умеет, чтож, идем дальше:

Я говорю что знаю что в MySQL это решается просто, и мне плевать кто конкретно отвечает за это, драйвер или сама база или дух луны, в данном случае это не имеет значения. Я просто знаю что есть такой инструмент и я его использую (инкапсуляция мать её)

Так же как я не знаю, с помощью какого кода база данных выбирает, в каких конкретно файлах с какой структурой она их хранит, я знаю что я могу написать корректный запрос, и она мне вернет конкретный ответ. Я пользователь БД, а не её разработчик, я знаю о ней столько сколько необходимо пользователю.

Теперь возвращаемся к нашим баранам, растолкуйте мне пожалуйста, раз уж мои предыдущие вопросы могли оставить какое либо двусмыслие, за что именно отвечает настройка:

"client charset" драйвера FreeTDS?
7 авг 12, 18:24    [12977079]     Ответить | Цитировать Сообщить модератору
 Re: DBLIB и кодировка UTF8  [new]
invm
Member

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

MS SQL хранит строковые данные либо не в юникоде (типы char, varchar, varchar(max), text), либо в юникоде UCS-2 (типы nchar, nvarchar, nvarchar(max), ntext).

За что отвечает настройка "client charset" нужно спрашивать авторов FreeTDS, кои к MS SQL отношения не имеют.
7 авг 12, 18:35    [12977127]     Ответить | Цитировать Сообщить модератору
 Re: DBLIB и кодировка UTF8  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
UTF-8 это юникод. dblib никогда с ним не работала и не будет работать. Более того, SQL Server использует UCS-2, поэтому даже если Вы уйдете от dblib, вам все равно надо будет конвретить на уровне WEB приложения.
7 авг 12, 18:38    [12977137]     Ответить | Цитировать Сообщить модератору
 Re: DBLIB и кодировка UTF8  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Мое сообщение, конечно, касалось DB-Library в части "никогда с ним не работала и не будет работать".
7 авг 12, 18:41    [12977147]     Ответить | Цитировать Сообщить модератору
 Re: DBLIB и кодировка UTF8  [new]
Glory
Member

Откуда:
Сообщений: 104751
thekip
Вы говорите что MSSQL это не умеет делать, так? Значит здесь определились - сама база конвертить не умеет, чтож, идем дальше:

Сервер выполняет команды, которые ему передают на выполнение. А значения каких то данных никакой сервер автоматически не меняет.

thekip
Я говорю что знаю что в MySQL это решается просто, и мне плевать кто конкретно отвечает за это, драйвер или сама база или дух луны, в данном случае это не имеет значения. Я просто знаю что есть такой инструмент и я его использую (инкапсуляция мать её)

Вы просто не знаете, что именно делают ваш драйвер и ваш сервер. Отсюда и "наплевать".
Вы сначала решите, где вы собрались кодировать ваши данные.

thekip
Теперь возвращаемся к нашим баранам, растолкуйте мне пожалуйста, раз уж мои предыдущие вопросы могли оставить какое либо двусмыслие, за что именно отвечает настройка:

"client charset" драйвера FreeTDS?

Осталиось недоумение, какое отношение к настройкам клиента имеет сервер.
У драйвера есть производитель, который документировал его функционал.
Сервер на этот функционал повлиять не может.
7 авг 12, 19:49    [12977488]     Ответить | Цитировать Сообщить модератору
 Re: DBLIB и кодировка UTF8  [new]
thekip
Member

Откуда:
Сообщений: 17
Хорошо. Построим вопрос подругому: что мне нужно сделать что бы получить данные в нужной мне кодировке учитывая что в самой базе я ничего не могу менять и iconv использовать на каждой текстовой строке не хочу?
7 авг 12, 23:04    [12978231]     Ответить | Цитировать Сообщить модератору
 Re: DBLIB и кодировка UTF8  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
thekip
Хорошо. Построим вопрос подругому: что мне нужно сделать что бы получить данные в нужной мне кодировке учитывая что в самой базе я ничего не могу менять и iconv использовать на каждой текстовой строке не хочу?


Вам не вопрос надо строить подругому, а задать это вопрос в форуме по FreeTDS.
7 авг 12, 23:06    [12978236]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: DBLIB и кодировка UTF8  [new]
thekip
Member

Откуда:
Сообщений: 17
Для тех кто наткнется на этот топик из гугла выкладываю решение:

Для того что бы freetds на лету менял кодировку необходимо указать версию протокола не меньше 7 и явно задать кодировку.

Пример конфига:

/etc/freetds/freetds.conf

[global]
        # TDS protocol version
        tds version = 7.0
        client charset = UTF-8


Решение найдено здесь: http://stackoverflow.com/questions/13377812/getting-data-with-utf-8-charset-from-mssql-server-using-php-freetds-extension/13877766#13877766
10 июн 14, 14:03    [16148851]     Ответить | Цитировать Сообщить модератору
 Re: DBLIB и кодировка UTF8  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
thekip
К примеру в MySQL есть возможность "на лету" конвертировать входящие - исходящие данные.
Конечно, в мире говнокода что только не встретишь.
thekip
Для тех кто наткнется на этот топик из гугла выкладываю решение
Очередной 100500 топик про это дело, только на этом форуме.
10 июн 14, 16:19    [16149968]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить