#mysql #sql-server #odbc #linked-server #openquery
#mysql #sql-сервер #odbc #связанный сервер #openquery
Вопрос:
Я уже несколько лет использую соединитель для передачи и извлечения данных между базой данных MS SQL Server и несколькими различными базами данных MySQL. Я настраиваю связанный сервер, затем с помощью OPENQUERY создаю нужные мне представления и записываю свои выборки, обновления и вставки для этих представлений. Работает как мечта.
Тем не менее, я пытаюсь интегрироваться с новой базой данных MySQL, созданной поставщиком, который использует тип данных ENUM, что вызывает у меня проблемы.
Когда я пытаюсь OPENQUERY, я получаю странную ошибку:
OLE DB provider 'MSDASQL' for linked server 'MYSQL_DATABASE' returned data that does not match expected data length for column '[MSDASQL].EnumDataField'. The (maximum) expected data length is 10, while the returned data length is 8.
Я могу исправить это, преобразовав поле ENUM в СИМВОЛ в запросе, и все работает нормально.
Но теперь мне нужно вставить или обновить это поле перечисления, и я не могу понять, как это сделать. Если я преобразую тип данных в представлении, я не смогу использовать это представление для вставки или обновления.
Есть ли у меня способ работать с полями перечисления через соединитель? Особенно способ для меня сделать ВСТАВКУ или ОБНОВЛЕНИЕ значения ПЕРЕЧИСЛЕНИЯ?
Комментарии:
1. Работают ли какие-либо из обходных путей, описанных в этом отчете об ошибке, для вас? bugs.mysql.com/bug.php?id=46857
2. В качестве альтернативы, вы пытались обновить его, используя номер индекса (позицию строкового значения в списке значений), а не строковое значение?
3. Я видел это ранее и обнаружил, что добавление DBCC TRACEON (8765) к моему запросу действительно позволит мне извлекать данные без необходимости преобразования символов. Однако, похоже, это не помогает при вставке / обновлении.
4. Есть какие-нибудь успехи в этом? У меня такая же проблема, и я не могу найти решение! Спасибо