Я пытаюсь преобразовать некоторые данные 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 символов. Это заставляет мои запросы работать должным образом, но все же не объясняет, почему данные содержат их в первую очередь! – Mhatma