Миграция MySQL Workbench с SQL Server 2008 на MySQL: ОШИБКА: определите количество строк для копирования: неподдерживаемый тип (ы) операнда

Я пытаюсь перенести базу данных с SQL Server 2008 на MySQL, используя MySQL Workbench 5.2.46CE. Все работает нормально до копирования данных (шаг «Массовая передача данных»):

Начало...
Подготовить информацию для копирования данных...
Подготовить информацию для выполнения копирования данных
Определить количество копируемых строк....
Подсчет количества строк в таблицах ...
wbcopytables.exe --count-only --passwords-from-stdin --odbc-source=Driver={SQL Server};Server=.\sqlexpress;Database=... ;ID пользователя= ... ;Password=... --table-file=...
ОШИБКА: определить количество копируемых строк: неподдерживаемые типы операндов для +: 'NoneType' и 'str'
Не удалось

Я действительно не понимаю, почему я это понимаю, поэтому, если у кого-то из вас есть идея... :) (PS: сегодня я начал использовать SQL Server 2008 и MySQL Workbench, поэтому я действительно не знаю, как они работают)

EDIT 2 - SQL Express Table DDL (обновлено)

CREATE TABLE [dbo].[S_OCivilite](
    [OCIV_Id] [int] IDENTITY(0,1) NOT N'',
    [OCIV_Code_Pan] [nvarchar](3) NOT N'',
    [OCIV_Intitule_Pan] [nvarchar](35) NOT N'',
    [OCIV_DateModif_Pd] [datetime] NOT N'',
 CONSTRAINT [PK_OCIV_Id] PRIMARY KEY CLUSTERED 
(
    [OCIV_Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
 CONSTRAINT [IX_OCIV_Code_Pan] UNIQUE NONCLUSTERED 
(
    [OCIV_Code_Pan] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

person Yoh    schedule 06.03.2013    source источник
comment
Для меня это больше похоже на баг. Вы должны отправить отчет об ошибке для этого bugs.mysql.com   -  person Mike Lischke    schedule 07.03.2013


Ответы (1)


При переходе из одной БД в другую вы всегда будете сталкиваться с препятствиями при преобразовании типов данных. В двух словах вам нужно понять, какие структуры таблиц находятся в вашей исходной БД и как они сопоставляются с теми же структурами в целевой БД. Все эти базы данных SQL поддерживают или должны поддерживать ANSI SQL, коллективный общий аспект SQL, однако каждый поставщик БД имеет процедурные расширения и DDL, что делает перекрестное преобразование интересным.

Итак, читая ваш вопрос, у вас не SQL Server 2008, а SQL Express, который является «облегченной» версией SQL Server. Ваша ошибка говорит о том, что при чтении таблицы для подсчета строк она обнаружила тип данных или неподдерживаемый оператор ddl и не может обработать приведение типов.

Я использую MySQL workbench, но не пытался полностью перенести БД. Вы должны искать настройки, которые ослабляют приведение типов или отправляют все в MySQL в виде varchar, а затем последующий процесс ETL правильно обрабатывает и приводит данные к типам. Или делайте таблицу за раз, пока не поймете, на что она действительно жалуется.

Если вы можете опубликовать записи или записи, на которые они жалуются, или таблицу DDL из SQLExpress, это действительно поможет.

РЕДАКТИРОВАТЬ 1: ответ на редактирование SQL DDL

Я бы сначала подозревал столбец Identity в SQL Server. Соответствующий тип данных MySQL должен быть AUTO_INCREMENT. Вам нужно найти логи для Bulk loader. Вы должны иметь возможность установить уровень ведения журнала и фактически увидеть, на что он жалуется.

person apesa    schedule 06.03.2013
comment
В процессе импорта не так много вариантов, поэтому я не думаю, что могу сказать ему, чтобы он приводил все как varchar (возможно, изменив скрипты Python, которые выполняют всю работу, но я не знаю Python ^^ )... Я посмотрел в SQL Server Management Studio, чтобы изменить параметры базы данных, но не нашел ничего подходящего... Я пытался перенести несколько таблиц в одиночку, и я всегда получаю ошибки (я думал, что это может быть проблема с значения NULL, но таблицы событий без какого-либо значения NULL отправляют ошибку..). - person Yoh; 06.03.2013
comment
Вот пример таблицы из SQL Management Studio: CREATE TABLE [dbo].[S_OCivilite]( [OCIV_Id] [int] IDENTITY(0,1) NOT NULL, [OCIV_Code_Pan] [nvarchar](3) NOT NULL, [ OCIV_Intitule_Pan] [nvarchar](35) NOT NULL, [OCIV_DateModif_Pd] [datetime] NOT NULL) - person Yoh; 06.03.2013
comment
Я нашел только 1 файл журнала (user/AppData/Roaming/MySQL/Workbench/log), но я не думаю, что это поможет, поскольку информации больше нет: pastebin.com/cwJCRTs7 . Workbench правильно создает новую таблицу в базе данных MySQL, затем пытается подсчитать количество строк и... терпит неудачу :( Я смотрел в настройках Workbench, но ничего не нашел относительно журналов (в их настройках не так много вещей ). - person Yoh; 07.03.2013
comment
Если это не ваш DDL, то это должны быть сами данные. Как выглядит соответствующее определение таблицы в MySQL? Как он обработал столбец Identity? Является ли OCIV_Id в MySQL типом поля AUTO_INCREMENT? - person apesa; 07.03.2013
comment
Вот MySQL DDL: CREATE TABLE IF NOT EXISTS S_OCivilite ( OCIV_Id int(11) NOT NULL AUTO_INCREMENT, OCIV_Code_Pan varchar(6) NOT NULL, OCIV_Intitule_Pan varchar(70) NOT NULL, OCIV_DateModif_Pd timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (OCIV_Id) , УНИКАЛЬНЫЙ КЛЮЧ IX_OCIV_Code_Pan (OCIV_Code_Pan) ). Вроде все в порядке, Workbench хорошо справляется с этой задачей. - person Yoh; 07.03.2013
comment
2 вещи. типы данных timestamp и datetime различны и по-разному обрабатываются механизмом хранения БД. Является ли OCIV_DateModif_pd просто датой изменения? Если это так, вы можете изменить метку времени на дату и время. Это может быть проблемой. Другое дело, что в вашем SQL Server DDL вы не указываете PK или уникальный ключ, например таблицу MySQL. Если ограничения не идентичны между двумя таблицами, они не будут хранить данные одинаково и могут иметь то, что ваша таблица MySQL увидит как дубликат PK. - person apesa; 08.03.2013
comment
Я попытался изменить метку времени на дату и время ( OCIV_DateModif_Pd DATETIME NULL ) и удалил уникальный ключ (моя ошибка, в SQL DDL я не скопировал строку PK... Только что увидел это... Я собираюсь отредактировать свой первый пост, извините ^^'), и всегда одна и та же ошибка ... Я попробовал другое программное обеспечение (SQL Script Builder), которое воссоздает все, кроме FK, я попытаюсь использовать это ... В любом случае спасибо за вашу помощь. ! - person Yoh; 08.03.2013
comment
Вы когда-нибудь находили решение по этому поводу?? Я хочу выполнить тот же процесс здесь, и я застреваю с той же ошибкой. - person meanbunny; 10.07.2013