Использование перечисляемого типа данных с соединителем MySQL ODBC в SSMS со связанным сервером

#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. Есть какие-нибудь успехи в этом? У меня такая же проблема, и я не могу найти решение! Спасибо