В какой кодировке хранятся данные в MS SQL 1C?

1. Shaka13 16.07.18 12:35 Сейчас в теме
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Timur.V 78 16.07.18 13:01 Сейчас в теме
в MS SQL кодировка не меняется, она всегда юникодная. Collation - это таблица сопоставления, определяет, как сравнивать строки.
+
3. herfis 498 16.07.18 14:00 Сейчас в теме
4. Shaka13 16.07.18 14:36 Сейчас в теме
(3)
(2)
что-то подсказывает, что нет "_IDRRef": "„Ќј®Е6љ6\u0011зL-]MZ4"
+
5. spacecraft 16.07.18 14:52 Сейчас в теме
(4) при установке mssql выбирается кодировка. 1С работает только с выбранной Unicode Cyrillic_General.
"„Ќј®Е6љ6\u0011зL-]MZ4" это откуда и как получено? Скорее всего при получении в другой кодировке. Просто сбита кодировка при декодировании в неверную кодировку.
+
14. Shaka13 17.07.18 10:17 Сейчас в теме
(5)я делаю выборку из БД с помощью php
+
6. herfis 498 16.07.18 14:55 Сейчас в теме
(4) Обычно, когда спрашивают про кодировку, имеют в виду строковые поля :) Ибо она только для них имеет смысл.
_IDRRef - не текстовое поле. Это одинэсная ссылка. GUID упакованный в binary.
Соответственно, та строка что ты видишь - это просто отображение двоичных данных в какой-то кодировке (неважно какой - это уже зависит от инструмента, которым смотришь). Тоже самое, как если бы ты открыл исполняемый файл в текстовом редакторе и сетовал на непонятные буквы.
+
7. Shaka13 16.07.18 15:39 Сейчас в теме
да, разобрался, там действительно есть еще бинарные данные и как их запросом прочитать?
+
8. herfis 498 16.07.18 15:48 Сейчас в теме
(7) Смотря откуда, чем и с какой целью читаешь. Если из 1С через ADO, то проще всего поискать готовые примеры. Не ты первый парсишь ссылки 1С прямыми запросами. Там надо некоторые байты еще переставить - часть последних байтов гуида 1С переносит вперед (относящихся ко времени создания), чтобы основная вставка данных шла в конец индекса.
Если тебе просто на позырить, то тот же dbForge из коробки умеет небольшие двоичные типы данных отображать в шестнадцатеричке.
ЗЫ. Хм, хотя Management Studio 2014 сервера тоже нормально показывает...
+
9. Shaka13 16.07.18 15:53 Сейчас в теме
(8)я хотел прочитать минуя 1С напрямую к ms sql
+
10. herfis 498 16.07.18 15:53 Сейчас в теме
(9) Тогда это вопрос к тем языкам и библиотекам, которые используешь :) Поиск в помощь.
+
12. Shaka13 17.07.18 10:12 Сейчас в теме
(10)уперся в возможности языка, php не может корректно работать с бинарными данными
+
15. herfis 498 17.07.18 11:11 Сейчас в теме
(12) Не верю. Думаю, ты плохо искал.
Но возможно будет проще преобразовать двоичные данные в строковое шестнадцатеричное представление прямо в запросе TransactSQL. По-моему, это возможно. Кури мануал по функции convert.
+
16. Shaka13 17.07.18 11:23 Сейчас в теме
(15)
convert
нет такой функции
+
17. herfis 498 17.07.18 11:26 Сейчас в теме
18. Shaka13 17.07.18 14:12 Сейчас в теме
(17)я думал ты про конвер в пыхе говорил, а за ссылку спасибо, разбираюсь как преобразовать больше одного столбца )
+
19. herfis 498 17.07.18 15:02 Сейчас в теме
(18) Я говорил про преобразование в запросе, а запросы "пыху" пока что не понимают :)
+
20. Shaka13 17.07.18 16:09 Сейчас в теме
(19)
а запросы "пыху" пока что не понимают :)
что ты имеешь ввиду?
+
11. SlavaKron 16.07.18 16:20 Сейчас в теме
Возможно вам пригодится такой код:
Выборка = Соединение.Execute(ТекстЗапроса);

Если Выборка.EOF() = 0 Тогда		
	
	КоличествоКолонок = Выборка.Fields.Count - 1;
	
	ТЗ = Новый ТаблицаЗначений;
	Для Сч = 0 По КоличествоКолонок Цикл
		ИмяКолонки = Выборка.Fields(Сч).Name;
		ТЗ.Колонки.Добавить(ИмяКолонки);
	КонецЦикла;
	
	Данные = Выборка.GetRows().Выгрузить();
	Для Каждого Стр Из Данные Цикл Н = ТЗ.Добавить(); Для Сч = 0 По КоличествоКолонок Цикл Н[Сч] = Стр[Сч] КонецЦикла КонецЦикла;
	
	
	
	Таб.ФиксацияСверху = 1;
	Для Сч = 1 По КоличествоКолонок + 1 Цикл
		Таб.Область(1, Сч).Текст = ТЗ.Колонки[Сч - 1].Имя		
	КонецЦикла;
	ТекущаяСтрока = 2;
	Для Каждого Стр Из ТЗ Цикл
		Для Сч = 0 По КоличествоКолонок Цикл
			А = Стр[Сч];
			Если ТипЗнч(А) = Тип("Массив") Тогда
				
				Если А.Количество() = 16 Тогда
					Таб.Область(ТекущаяСтрока, Сч + 1).Текст = Ч16[А[12]] + Ч16[А[13]] + Ч16[А[14]] + Ч16[А[15]] + "-" + Ч16[А[10]] + Ч16[А[11]] + "-" + Ч16[А[8]] + Ч16[А[9]] + "-" + Ч16[А[0]] + Ч16[А[1]] + "-" + Ч16[А[2]] + Ч16[А[3]] + Ч16[А[4]] + Ч16[А[5]] + Ч16[А[6]] + Ч16[А[7]];
				КонецЕсли;
			Иначе
				Таб.Область(ТекущаяСтрока, Сч + 1).Текст = А;
			КонецЕсли;
		КонецЦикла;
		ТекущаяСтрока = ТекущаяСтрока + 1;
	КонецЦикла;
	
КонецЕсли;
Показать

Ч16 = Новый Массив(256);
Символы16 = "0123456789abcdef";
Для Сч = 0 По 255 Цикл
	Ч16[Сч] = Сред(Символы16, Цел(Сч / 16) + 1, 1) + Сред(Символы16, Сч % 16 + 1, 1)
КонецЦикла;
Прикрепленные файлы:
+
13. Shaka13 17.07.18 10:13 Сейчас в теме
(11)спасибо, но для чего мне это?
+
21. mad375 18.07.18 11:49 Сейчас в теме
Может зайти с другой стороны и запилить вебсервис? И не надо будет танцев с расшифровкой ссылок
+
22. Shaka13 18.07.18 16:24 Сейчас в теме
(21)вебсервис, ты имеешь ввиду в самой 1с?
+
23. mad375 19.07.18 06:20 Сейчас в теме
24. Shaka13 19.07.18 13:32 Сейчас в теме
(23)мы хотели уйти от этого
+
25. mad375 20.07.18 05:06 Сейчас в теме
(24)Почему, если не секрет? Производительность?
+
26. Shaka13 20.07.18 12:45 Сейчас в теме
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот