|
1С и Azure, проблемы с кодировкой | ☑ | ||
---|---|---|---|---|
0
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 и как эту кодировку установить в строке соединения? заранее благодарю за помощь. |
|||
1
novichok79
17.09.18
✎
13:28
|
на стороне Azure сортировка "SQL_Latin1_General_CP1_CI_AS", наверное надо поменять на чего-нибудь русское.
ваши предложения, господа. |
|||
2
Cool_Profi
17.09.18
✎
13:30
|
В запросах в полях попробуй поставить оператор COLLATE с нужной кодировкой
|
|||
3
scanduta
17.09.18
✎
13:33
|
а че 1с работает нормально с azure?
|
|||
4
novichok79
17.09.18
✎
13:35
|
(2) уже грохнул базу в Azure, все равно она тестовая и добавил базу с сортировкой "Cyrillic_General_CI_AS", погоняю ее.
|
|||
5
novichok79
17.09.18
✎
13:42
|
(4) с кодировкой Cyrillic_General_CI_AS все збс
|
|||
6
novichok79
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С уходят крякозябры. посоны, ай нид хелп. |
|||
7
novichok79
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'Докторская колбаса') то все збс. |
|||
8
novichok79
18.09.18
✎
12:53
|
пробовал ODBC Driver 11 for SQL Server, ODBC Driver 13 for SQL Server, ODBC Driver 17 for SQL Server
везде одна и таже петрушка. |
|||
9
novichok79
18.09.18
✎
13:05
|
ну и соотвественно, SQL Server Native Client 11.0 - тож самое.
|
|||
10
novichok79
18.09.18
✎
13:05
|
придется через ADODB писать, боль...
|
|||
11
Вафель
18.09.18
✎
13:17
|
у тебя кодировка в базе не русская. ты туда русские буквы ну никак не запишешь.
если бы хоть юникод был |
|||
12
novichok79
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) А сейчас через внешний источник чтоли сделал?
|
|||
14
novichok79
18.09.18
✎
13:27
|
(13) да
|
|||
15
novichok79
18.09.18
✎
13:28
|
если бы делал через ADODB, логи запросов к базе не потребовались бы...
|
|||
16
Cool_Profi
18.09.18
✎
13:38
|
используй силу COLLATE, падаван юный...
|
|||
17
novichok79
18.09.18
✎
14:27
|
(16) все бы хорошо, а как collate передать в параметры внешнего источника? я давно мог бы через ADODB это сделать, просто не хочется переписывать процедуру.
|
|||
18
Cool_Profi
18.09.18
✎
14:56
|
(17) SELECT Fld1 COLLATE ...
Вроде так. |
|||
19
novichok79
18.09.18
✎
15:00
|
(18) отлично, повторю еще раз, как COLLATE передается во внешний источник?
|
|||
20
novichok79
18.09.18
✎
15:01
|
в общем, ошибка была в другом, тип базы был не указан в подключении.
|
|||
21
novichok79
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 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |