2015-04-22 6 views
0

Я пытаюсь преобразовать некоторые данные SQL Server в mySQL, но продолжаю сталкиваться с препятствиями после барьера.Преобразование данных SQL Server в MySQL

Я предполагал, что самым простым способом было бы экспортировать данные SQL Server в CSV и импортировать его таким образом (мало ли я знал, что это было не так просто ...!). Как только я понял, как заставить его добавлять кавычки в CSV, я попытался импортировать в mySQL. Теперь по какой-то причине все данные были импортированы с помощью кавычек. Вот мой запрос MySql:

LOAD DATA INFILE 'file.csv' INTO TABLE test 
FIELDS ENCLOSED BY '"' 
TERMINATED BY "," 
LINES TERMINATED BY "\n" 

Этот импорт, но это, кажется, игнорирует кавычки, и, когда запятые присутствуют в данных она полностью облажался строки. Данные также импортируются в том числе котировки, просматривать эти данные непосредственно из таблицы:

"1" "1" "0" "{08CA6F70-735D-46ED-8EAB-C17A8BED1FCD}" "Reporting_1" "60"  "Reporting" "ABC" "2008-04-21 19:25:28.013000000" "False" "True" "False" "True" "3" "164" "2033" "565077" "7929083" "334980" "2013-01-11 15:35:45.970000000" "False" "" "0" "False" "" "0" "0" "" "" "False" "False" "True" "True" "" "" "False" 

мне нужно сделать некоторые постобработки с PHP на этих данных, поэтому я предположил, что я мог бы просто лишить котировки с моим кодом , Кавычки не были обрезаны с помощью функции trim() (это просто не сработало), поэтому я str_replaced кавычки, и это действительно работает, однако:

Я переназначаю данные и вставляю их в другую таблицу mySQL (с разными именами столбцов). При вставке обработанных данных выше, не все из них делает это с запросом БД. Возьмите этот запрос, например:

INSERT INTO tesxf.xf_node   (`node_id`,`parent_node_id`,`title`,`description`,`node_name`,`node_type_id`,`display_in_list`) 
VALUES 
('2123','2281','Container Name','','38064','Forum','1') 

node_id и название и т.д. сделать это в новую БД, но parent_node_id никогда не делает. Значение всегда вставляется как 0. Когда я копирую запрос выше и запускаю его вручную, он правильно вставляет данные. Кроме того, если я запускаю данные через mysql_real_escape_string, он выходит, как это (только конвертируется два поля здесь):

INSERT INTO tesxf.xf_node 
(`node_id`,`parent_node_id`,`title`,`description`,`node_name`,`node_type_id`,`display_in_list`) 
    VALUES 
    ('673','\0\06\08\08\0\0','\0\0S\0t\0o\0r\0y\0 \0W\0r\0i\0t\0i\0n\0g\0 \0-\0 \0F\0o\0r\0u\0m\0\0','','240576','Forum','1') 

Я никогда не видел этого раньше. Это заставляет меня думать, что, возможно, данные, полученные из импортированной таблицы, находятся в некотором нечетном формате с некоторыми скрытыми символами, которые я не вижу? Как я могу это исключить? Может ли это быть причиной того, что данные не импортировались должным образом в первую очередь?

Я запускаю SQL-сервер 2012 Я думаю (не слишком хорошо знаком с ним). Мой экземпляр mySQL работает на OSX 10.6 и, как правило, отлично (я сделал аналогичный импорт, используя postgres и oracle и т. Д.).

Mysql is: mysql Ver 14.12 Распространение 5.0.92 для apple-darwin10.0 (i386) с использованием обложек EditLine PHP: PHP 5.3.26 (cli) (построено: 7 июля 2013 18:30:38)

Потеря моего ума здесь ... Думаю, моя следующая попытка будет заключаться в построении запросов в текстовый файл, а затем выполняется это вручную ... Надеюсь, что есть что-то простое, что я пропустил.

CSV-файлы были переданы по FTP в двоичном режиме, и я применил: set ff = unix к ним с помощью vim (как я читал здесь, что может быть проблемой).

Я также попытался установить оболочку SQL Server/freetds для PHP на этом сервере + еще 1, но не начинайте с этого!

+0

ОК, я думаю, что получаю где-то, заменяя нулевое значение \ 0 символов. Это заставляет мои запросы работать должным образом, но все же не объясняет, почему данные содержат их в первую очередь! – Mhatma

ответ

1

Вы пытались использовать набор инструментов миграции MySql? Если нет, вы можете попробовать. Вот ссылка MySql Migration Toolkit

+0

Это выглядит многообещающим, спасибо! Но я не могу подключиться к SQL-серверу.Просто говорит, что отказ в соединении (одна и та же машина). Я проверял подключения и даже добавил правило брандмауэра. – Mhatma

+0

Возможно, что-то, что вам может не хватать, проверит эту ссылку [Миграция базы данных] (http://webmodelling.com/webbits/databases/database-migration.aspx) – Navy

+0

Благодарим вас за это. Это полностью решило мои проблемы! После длительного экспорта (база данных была огромной) мои данные выглядят в удобном для чтения формате. Для чего это важно, проблемы с подключением были решены путем редактирования TCP/IP-параметров SQL-сервера (извините, бит расплывчатый). Я потерял страницу, которая мне помогла, но похожее объяснение здесь: http://dbaspot.com/ms-sqlserver/220166-how-does-ip1-ip2-ipall-work-ip-adddresses-tab.html – Mhatma

Смежные вопросы