Кодировка, ADO, collate

1. kraynev-navi 683 17.08.21 09:33 Сейчас в теме
Добрый день!
Есть старые серверы 1С OLD1, OLD2 на windows server 2016 (английская) с native client SQL (версии 11.4.7001.0, 11.4.7462.6)
Есть новые серверы 1С NEW1, NEW2, NEW3 на windows server 2016 с native client SQL (версии 11.4.7001.0)
Версия 1С идентична везде 8.3.18.14**

Есть код (выдрал кусок из прода и упростил для понимания)

Функция ЗапросЧерезАдо() Экспорт
	
	ТаймаутСоединения = 30;
	Сервер = "SERVER1";
	База = "db1";
	ConnectionString	= "Provider=SQLOLEDB.1; Server="+Сервер+"; Database="+База+";Trusted_Connection=yes;";
		
	ТекстЗапроса = "
	|SELECT Top 100
	|	'Б' AS ТипДеятельности";
	
	Соединение						= Новый COMОбъект("ADODB.Connection"); 
	Команда							= Новый COMОбъект("ADODB.Command"); 
	RS								= Новый COMОбъект("ADODB.RecordSet");
		
	Соединение.ConnectionTimeOut	= ТаймаутСоединения; 
	Соединение.CommandTimeOut		= ТаймаутСоединения;
	Команда.CommandTimeOut			= ТаймаутСоединения;
	Соединение.CursorLocation		= 3; 

	Соединение.Open(ConnectionString);  
	Команда.ActiveConnection = Соединение;
	
	Команда.CommandType = 1;
	Команда.CommandText = ТекстЗапроса;
	
	Попытка
		RS = Команда.Execute();
		Рез = Истина;
	Исключение
		ЗаписьЖурналаРегистрации("ADO", УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
		Рез = Ложь;
		ВызватьИсключение;
	КонецПопытки;
		
	Таблица = Новый ТаблицаЗначений;
	КолонкиТаблицы = Таблица.Колонки;
	Для каждого Field Из RS.Fields Цикл
		ТипКолонки = ТипПоПолюАДО(Field);
		Колонка = КолонкиТаблицы.Добавить(Field.Name, ТипКолонки, Field.Name);
	КонецЦикла; 
	
	Если RS.State <> 0 Тогда
		Пока Не RS.EOF() Цикл
			НоваяСтрока = Таблица.Добавить();
			Для каждого Поле Из RS.Fields Цикл
				НоваяСтрока[Поле.Name] = Поле.Value;
			КонецЦикла;
			RS.MoveNext();
		КонецЦикла;
	КонецЕсли;
	
	Возврат Таблица[0].ТипДеятельности;
	
КонецФункции

Функция ТипПоПолюАДО(Field)
	Если Field.Type = 3 Или Field.Type = 2 Или Field.Type = 131 Тогда
		Возврат Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(0, 0, ДопустимыйЗнак.Любой));
	ИначеЕсли Field.Type = 200 Или Field.Type = 202 Тогда
		Возврат Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(Field.DefinedSize, ДопустимаяДлина.Переменная));
	ИначеЕсли Field.Type = 135 Тогда
		Возврат Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя));
	ИначеЕсли Field.Type = 11 Или Field.Type = 2 Тогда
		Возврат Новый ОписаниеТипов("Булево");
	ИначеЕсли Field.Type = 205 Тогда
		Возврат Новый ОписаниеТипов;
	КонецЕсли;
	Возврат Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная));
КонецФункции
Показать



Ожидаем в результате выполнения символ "Б". На старых так и есть, на новых "?" (знак вопроса)

Смена charset=***, autotranslate=false - не помогла.

И тут полумагия
На новых серверах 1С была удалена и поставлена заново с выбором языка интерфейса Russian - но помогло только одному серверу. Остальным новым нет.

Что тут за тайна такая с кодировкой?

p.s. База с данными cyrillic_general_ci_as.
Найденные решения
4. kraynev-navi 683 19.08.21 11:38 Сейчас в теме
Решение такое: Control Panel - Region - Administrative - Change System locale - Region Settings. Установить Russian (Russia)
Однако, удивляет тот факт, что на одном из серверов работает и без этой манипуляции. Там дефолтно стоит English
Прикрепленные файлы:
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. kraynev-navi 683 18.08.21 08:53 Сейчас в теме
Похоже от базы SQL вообще не зависит
3. kraynev-navi 683 18.08.21 09:04 Сейчас в теме
На одном из проблемных серверов рядом стоит 8.3.19.1150 - такая же проблема
4. kraynev-navi 683 19.08.21 11:38 Сейчас в теме
Решение такое: Control Panel - Region - Administrative - Change System locale - Region Settings. Установить Russian (Russia)
Однако, удивляет тот факт, что на одном из серверов работает и без этой манипуляции. Там дефолтно стоит English
Прикрепленные файлы:
Оставьте свое сообщение

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