Внешний источник данных MySQL и кодировка #746867


#0 by diamond-nsk
Здравия желаю! Возникла следующая ситуация, третий день не могу сам разобраться... Подключаюсь из 1С 8.3 через Внешние источники данных к мускулю, данные получаю - всё ОК, но русские буквы получаются кракозябрами: Щербаков Александр Сергеевич В самом Мускуле: Если подключиться к базе через какой-нибудь HeidiSQL - в табицах отображаются такие же кракозябры. В софте-владельце базы, который в эту базу, собсна, и пишет  (UTM5) - всё ОК отображается. Строка подключения: Driver={MySQL ODBC 5.3 Unicode Driver}; Server=хх.хх.хх.хх; Пробовал добавлять в строку подключения: STMT=SET CHARACTER SET utf8; или STMT=SET CHARACTER SET latin1; или STMT=SET CHARACTER SET cp1251; - на результат никак не влияет, даже вид кракозябр не меняется... Кодировки в самом мускуле трогать нельзя, только как-то преобразовывать при чтении. Что я делаю не так, и что еще можно попробовать сделать/проверить?
#1 by diamond-nsk
UPD: на форуме не так кракозябры мои отобразились: вроде как это latin1 (cp1252)
#2 by Лефмихалыч
у таблицы чарсет и коллэйшн какие?
#3 by diamond-nsk
В коде CREATE таблицы чарсет не нашел, а COLLATE='latin1_swedish_ci'
#4 by Salimbek
Ну дык логично тогда, что крышу сносит. Закинул для теста туда: Ответ: Щербаков... (CP1252 ? UTF-8)
#5 by diamond-nsk
Ага, там же проверял, такой же результат. Какие мне действия предпринять, чтобы корректно выдергивать инфу в 1С? UMT5 как-то же работает с этой БД, корректно отображая русские символы.
#6 by Лефмихалыч
ALTER TABLE db_table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
#7 by Лефмихалыч
а потом при необходимости сконвертить символы в записях SELECT convert(cast(convert(LATIN1_FIELD using latin1) as binary) using utf8)
#8 by Лефмихалыч
там скорее всего в поле с коллэшном latin1_swedish_ci сохранены буквы из таблицы cp1252, которые ты в 1С пытаешься читать, как utf8_general
#9 by Лефмихалыч
+ я не знаю способов (хотя они наверняка есть) в 1С при чтении налету конвертить буквы, по этому предлагаю записывать без вот этих трюков cp1251>>latin1
#10 by diamond-nsk
Это, я так понимаю (простите, не великий спец - учусь), сконвертит саму таблицу в mysql и перекодирует символы в строках в "правильную" кодировку. Загвоздка в том, что это биллинг провайдера, конвертить таблицы которого мне, ессно дело, не дадут, на селект-то еле выбил доступ :) Тем более что он, биллинг, крутиться 24/7, непрерывно записывая сессии и траф около 15к абонентов + 6 операторов постоянно пялят в этот биллинг, и секир-башка будет, если что-то хоть на чуть-чуть остановится. Поэтому остаётся только вариант как-то "на лету" конвертить записи из этой биллинговой мускульной БД либо при подключении из 1С к MySQL, либо при выполнении SQL-запроса к БД, либо при обработке результатов выполнения запроса в 1С. При подключении в строке подключения указывая "STMT=SET CHARACTER SET latin1" - не реагирует. В SQL-запросе - нет возможности что-то такое указать, т.к. их выполняет сама 1C, транслируя свой псевдо-sql в реальный sql через объект "Внешний источник данных". А конвертить результаты запроса в другую кодировку 1С штатными средствами не умеет, пичааааль :(
#11 by diamond-nsk
UPD к на всякий: данные мне нужно только читать из MySQL в 1С.
#12 by Salimbek
Ну если никто за тебя не декодирует данные, то логичный вывод - декодируй сам. В качестве самого крайнего варианта - составляешь два массива: 1 - массив "А"-"Я" "а"-"я" и второй - находишь соответствие каждой букве, типа "?" - "Р", а далее каждую буковку преобразуешь. Или, можно, свою нормальную базу создать и выкачивать данные от провайдера в свою базу запросом, типа как в советуют. И уже оттуда вытаскивать данные для 1С.
#13 by ДенисЧ
А в чём проблема декодинга?
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С