Имя: Пароль:
1C
 
Внешние источники данных запись через 1с
,
0 Dunstan
 
06.12.16
17:40
Ситуация:
Есть простая таблица в MуSQL, где ключевым уникальным полем является строковое представление уникального идентификатора строка из 36 символов типа "e6e12e11-022a-11e6-85df-00e018f3c64a".
При записи встроенными средствами 1С дает ошибку:
//******************
Ошибка внешней базы данных:
ошибка при выполнении запроса
по причине:
Ошибка ODBC. SQLSTATE: HY000
Номер ошибки: 1292
Описание: [MySQL][ODBC 5.3(w) Driver][mysqld-5.7.16-log]Truncated incorrect INTEGER value: '435a5350-bbc1-11e6-8269-00ff75dfd0db'
//******************
1. Подозрительно что пишет не строку а число INTEGER.
2. В аналогичную таблицу но с другим сервером MySQL (5.6) пишет, но значение как-бы преобразует в число.
Может у кого есть мысли за эту тему?
1 Heckfy
 
06.12.16
17:41
Надо бы тип проверить на SQL.....
2 Cool_Profi
 
06.12.16
17:42
Мыслей много.
Но главная - использовать нормальные средства для записи в SQL...
3 Dunstan
 
06.12.16
17:58
(1) Такая же табличка и ее запись на MS SQL идет на ура.
Т.е. все тоже самое но сервер MS SQL/
4 Garykom
 
гуру
06.12.16
17:59
Truncated incorrect INTEGER value: '435a5350-bbc1-11e6-8269-00ff75dfd0db'

что нибудь намекает?
5 Garykom
 
гуру
06.12.16
18:00
(4)+ ну оно никак не лезет в https://dev.mysql.com/doc/refman/5.5/en/integer-types.html  даже обрезать не вышло говорит ))
6 Dunstan
 
06.12.16
18:00
(2) Нормальные это какие?
А реализация записи в 8.3.5 типа "создать" не то. Когда просто сохраняешь уже существующий элемент все ОК.
7 Garykom
 
гуру
06.12.16
18:01
Кста мускул со строковыми id длинными (куда засунули гуид) отвратно работает, по этому пришлось в свое время перейти на постгрес
8 Garykom
 
гуру
06.12.16
18:03
И да строка вида '435a5350-bbc1-11e6-8269-00ff75dfd0db' это просто строковое представление огромадного целого числа https://ru.wikipedia.org/wiki/GUID из 128 бит
9 Dunstan
 
06.12.16
18:03
(4) Запись должна идти в символьное поле, а не в цифровое.
Почему поля понимается как числовое, а не как символьное?
10 Garykom
 
гуру
06.12.16
18:04
(9) А ты преобразовал из УИД (1Сного) в строку то?
11 Dunstan
 
06.12.16
18:06
(9) нет взял с мускула UUID()
12 Garykom
 
гуру
06.12.16
18:12
13 Dunstan
 
06.12.16
18:12
Если записываю через встроенную функцию мускула то все ок.
14 Dunstan
 
06.12.16
18:13
(12) не понял юмора
15 Garykom
 
гуру
06.12.16
18:13
(14) кодировки то совпадают?
16 Garykom
 
гуру
06.12.16
18:15
17 Garykom
 
гуру
06.12.16
18:16
(16)+ В MySQL UUID можно хранить в полях различного типа, например:

1) Текстовый формат char(36). Тут всё просто – какую строку получаем, такую и заносим в таблицу.
2) Бинарный формат binary(16). Из UUID удаляются тире и всё это нужно обернуть функцией UNHEX().

1
UNHEX(REPLACE(UUID(), '-', ''))
18 Garykom
 
гуру
06.12.16
18:16
19 Dunstan
 
06.12.16
18:19
(18) Ну можно и так сделать. Но вот вопрос почему строку то как строку в базу не пишет?
Больше к 1с вопрос. Что за функцию он генерит при записи нового?
20 Dunstan
 
06.12.16
18:20
(18) Может в строку соединения что-то надо прописать или
как то описание таблицы дополнить?
21 Dunstan
 
06.12.16
21:31
С использованием UNHEX(REPLACE(UUID(), '-', ''))
все заработало! Спс всем за все!
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.