У меня есть сервер MSSQL 2005 и база данных MySQL в интрасети. Я хочу реплицировать некоторые таблицы из базы данных MSSQL в базу данных MySQL.
Я создал лицензированный сервер ODBC и успешно создал публикацию транзакций, и я вручную создал точно такие же таблицы в MySQL, и репликация, похоже, работает.
Причина, по которой я вручную создал таблицы в MySQL, заключается в том, что возникла проблема с созданием ключей и индексов из репликации из MSSQL. Что происходит, когда репликация выполняется, она преобразует поле varchar (200) в MySQL varchar, которое становится средним текстом в таблице MySQL и отображает ошибку при попытке создать первичный ключ или индекс. Как мне настроить публикацию для создания точной копии полей таблицы с правильной длиной в MySQL?
У меня на сервере установлен драйвер MySQL ODBC 5.1.
РЕДАКТИРОВАТЬ:
Когда я вижу файл MySQL.Log, он показывает запрос
CREATE TABLE `Inventory`(
`SKU` long varchar NOT NULL,
который впоследствии становится средним текстом в базе данных MySQL. Это показывает ошибку что-то вроде
BLOB/TEXT column 'SKU' used in key specification without a key length
в истории заданий репликации MSSQL. Когда я смотрю в таблицу в MySQL, тип поля для «SKU» - mediumtext.
Кроме того, не используйте графический интерфейс при создании публикации, добавлении статей и создании подписок, поскольку это все портит. Делайте все вручную с помощью SQL-скрипта.
Установите @schema_option = 0x000000000000000 для всех статей, чтобы SQL Server ничего не трогал.
Вероятно, вы можете использовать клиент SQuirreL SQL (на Java) для экспорта таблиц, а затем импортировать их в MySQL через JDBC. Я сомневаюсь, что существует метод ODBC для выполнения того, что вам нужно.
Кроме того, вы можете экспортировать базу данных SQL в файл CSV, а затем импортировать в MySQL с помощью команды:
LOAD DATA LOCAL INFILE C:\test.csv
INTO TABLE tbl_temp_data
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'