Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

1С и Azure, проблемы с кодировкой

1С и Azure, проблемы с кодировкой
Я
   novichok79
 
17.09.18 - 13:22
доброго времени суток, уважаемые специалисты. база - самописная, версия платформы - 1С:Предприятие 8.3 (8.3.9.2170)
имеется внешний источник, подключенный к базе в Azure.
строка соединения

DRIVER={ODBC Driver 17 for SQL Server};SERVER=tcp:enotzharitkotlety.database.windows.net,1433;UID=vasyapupkin@enotzharitkotlety;PWD=123;DATABASE=myaso;LANGUAGE=русский

все подключается, данные читаются, пишутся. когда пишу значения таблиц из 1С, в строковых полях в Azure - ??????????????????????
это предположительно кодировка.
как узнать кодировку 1С, Azure и как эту кодировку установить в строке соединения?
заранее благодарю за помощь.
 
 
   novichok79
 
1 - 17.09.18 - 13:28
на стороне Azure сортировка "SQL_Latin1_General_CP1_CI_AS", наверное надо поменять на чего-нибудь русское.
ваши предложения, господа.
   Cool_Profi
 
2 - 17.09.18 - 13:30
В запросах в полях попробуй поставить оператор COLLATE с нужной кодировкой
   scanduta
 
3 - 17.09.18 - 13:33
а че 1с работает нормально с azure?
   novichok79
 
4 - 17.09.18 - 13:35
(2) уже грохнул базу в Azure, все равно она тестовая и добавил базу с сортировкой "Cyrillic_General_CI_AS", погоняю ее.
   novichok79
 
5 - 17.09.18 - 13:42
(4) с кодировкой Cyrillic_General_CI_AS все збс
   novichok79
 
6 - 18.09.18 - 12:24
да, не дали мне сортировку на рабочей базе поменять на Cyrillic_General_CI_AS.
сделал свой системный DSN, пробовал в настройках Language менять и устанавливать перевод строк в Юникод, в логе ODBC пишет следующее

В Tue Sep 18 12:16:17 следующий запрос был выполнен за 64 мс
INSERT INTO "dbo"."Segment"  (Id,Segment) VALUES('6','Котлета мясная')
В Tue Sep 18 12:16:17 следующий запрос был выполнен за 64 мс
INSERT INTO "dbo"."Segment"  (Id,Segment) VALUES('1','Котлета куриная')
В Tue Sep 18 12:16:18 следующий запрос был выполнен за 64 мс
INSERT INTO "dbo"."Segment"  (Id,Segment) VALUES('2','Рулька вкусная')
В Tue Sep 18 12:16:18 следующий запрос был выполнен за 64 мс
INSERT INTO "dbo"."Segment"  (Id,Segment) VALUES('4','Чевапчичи')
В Tue Sep 18 12:16:18 следующий запрос был выполнен за 64 мс
INSERT INTO "dbo"."Segment"  (Id,Segment) VALUES('3','Сосисоны')
В Tue Sep 18 12:16:19 следующий запрос был выполнен за 63 мс
INSERT INTO "dbo"."Segment"  (Id,Segment) VALUES('11','Нарезочка')
В Tue Sep 18 12:16:19 следующий запрос был выполнен за 63 мс
INSERT INTO "dbo"."Segment"  (Id,Segment) VALUES('7','Салями')
В Tue Sep 18 12:16:20 следующий запрос был выполнен за 64 мс
INSERT INTO "dbo"."Segment"  (Id,Segment) VALUES('8','Докторская колбаса')

так вот, если взять на стороне Azure выполнить это дело, то крякозябры также появляются в таблицах, если спецификатор N перед строкой добавить, то все норм.
суть в том что 1С при любых настройках ODBC драйвера, который Microfost рекомендует в панели управления Azure, эта злосчастная N'ка не добавляется, в итоге из 1С уходят крякозябры. посоны, ай нид хелп.
   novichok79
 
7 - 18.09.18 - 12:27
то есть если вот такое написать в консоли запросов Azure

INSERT INTO "dbo"."Segment"  (Id,Segment) VALUES('6',N'Котлета мясная');
INSERT INTO "dbo"."Segment"  (Id,Segment) VALUES('1',N'Котлета куриная'); 
INSERT INTO "dbo"."Segment"  (Id,Segment) VALUES('2',N'Рулька вкусная');
INSERT INTO "dbo"."Segment"  (Id,Segment) VALUES('4',N'Чевапчичи');
INSERT INTO "dbo"."Segment"  (Id,Segment) VALUES('3',N'Сосисоны');
INSERT INTO "dbo"."Segment"  (Id,Segment) VALUES('11',N'Нарезочка');
INSERT INTO "dbo"."Segment"  (Id,Segment) VALUES('7',N'Салями');
INSERT INTO "dbo"."Segment"  (Id,Segment) VALUES('8',N'Докторская колбаса')

то все збс.
   novichok79
 
8 - 18.09.18 - 12:53
пробовал ODBC Driver 11 for SQL Server, ODBC Driver 13 for SQL Server, ODBC Driver 17 for SQL Server
везде одна и таже петрушка.
   novichok79
 
9 - 18.09.18 - 13:05
ну и соотвественно, SQL Server Native Client 11.0 - тож самое.
   novichok79
 
10 - 18.09.18 - 13:05
придется через ADODB писать, боль...
 
 Рекламное место пустует
   Вафель
 
11 - 18.09.18 - 13:17
у тебя кодировка в базе не русская. ты туда русские буквы ну никак не запишешь.
если бы хоть юникод был
   novichok79
 
12 - 18.09.18 - 13:26
(11) код создания таблицы:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Segment] (
    [Id]      INT           NOT NULL,
    [Segment] NVARCHAR (50) NULL
);

NVARCHAR - это Unicode насколько мне известно.
   Локи-13
 
13 - 18.09.18 - 13:27
(10) А сейчас через внешний источник чтоли сделал?
   novichok79
 
14 - 18.09.18 - 13:27
(13) да
   novichok79
 
15 - 18.09.18 - 13:28
если бы делал через ADODB, логи запросов к базе не потребовались бы...
   Cool_Profi
 
16 - 18.09.18 - 13:38
используй силу COLLATE, падаван юный...
   novichok79
 
17 - 18.09.18 - 14:27
(16) все бы хорошо, а как collate передать в параметры внешнего источника? я давно мог бы через ADODB это сделать, просто не хочется переписывать процедуру.
   Cool_Profi
 
18 - 18.09.18 - 14:56
(17) SELECT Fld1 COLLATE ...

Вроде так.
   novichok79
 
19 - 18.09.18 - 15:00
(18) отлично, повторю еще раз, как COLLATE передается во внешний источник?
   novichok79
 
20 - 18.09.18 - 15:01
в общем, ошибка была в другом, тип базы был не указан в подключении.
   novichok79
 
21 - 18.09.18 - 16:12
сейчас получается так:

В Tue Sep 18 16:04:20 следующий запрос был выполнен за 66 мс
SELECT TOP 0 CAST(NULL AS NUMERIC(10,0)) "_Id",
CAST(NULL AS NVARCHAR(50)) "_Segment"
INTO #tt1
В Tue Sep 18 16:04:20 следующий запрос был выполнен за 63 мс
SELECT SERVERPROPERTY('ProductVersion')
В Tue Sep 18 16:04:20 следующий запрос был выполнен за 66 мс
INSERT INTO #tt1 ("_Id","_Segment") VALUES
(6,N'Вася'),
(1,N'Петя'),
(2,N'Жора'),
(4,N'Диего'),
(3,N'Хуан'),
(11,N'Джанкарло'),
(7,N'Джузеппе'),
(8,N'Маша'),
(10,N'Наташа'),
(9,N'Марина'),
(5,N'Алевтина');
В Tue Sep 18 16:04:20 следующий запрос был выполнен за 66 мс
SELECT
T1."_Id",
T1."_Segment"
FROM #tt1 T1 

INNER JOIN "dbo"."Segment" T2 
ON T1."_Id" = T2.Id


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует