Массовая вставка MySQL в поля Geometry - PullRequest
2 голосов
/ 21 сентября 2010

У меня есть база данных mysql, которую я пытаюсь заполнить из текстового файла.Содержимое моего файла выглядит так (как только некоторые примеры. Есть тысячи строк)

1:GeomFromText('Polygon(0 0, 1 1, 2 2, 0 0)')
2:GeomFromText('Polygon(0 0, 1 2, 2 2, 0 0)')

В моей схеме первое поле является целым числом, а второе - GEOMETRY

Iпопробуйте загрузить данные

LOAD DATA LOCAL INFILE 'myfile.txt' INTO TABLE `testDb`.`testTable` FIELDS TERMINATED BY ':' LINES TERMINATED BY '\n'

И я получаю ошибку

Error Code 1416 Cannot get geometry object from data you send to the GEOMETRY field

Если я пытаюсь сделать отдельную вставку, например:

INSERT INTO TABLE testTable(id,region) VALUES (1,GeomFromText('Polygon(0 0, 1 1, 2 2, 0 0)'))

Это работаетНет проблем.Это очень неэффективно для большого количества вставок.Кто-нибудь знает, почему массовая загрузка выдает эту ошибку?

спасибо, Джефф

1 Ответ

4 голосов
/ 06 января 2011

Массовая вставка не оценивает операторы sql, она просто помещает значения в базу данных.Это означает, что GeomFromText ('Polygon (0 0, 1 1, 2 2, 0 0)') интерпретируется как просто строковое значение, которое не является объектом Geometry, и, следовательно, не может быть вставлено вСтолбец геометрии.

Вам необходимо установить функцию, которая будет вызываться при каждой вставке строки, как показано ниже, где выделенный текст obj_id и obj_geo - этоимена столбцов:

LOAD DATA INFILE 'c:\myFile.txt'
INTO TABLE `tbl_myTable`
(@var1, @var2)
SET
obj_id = @var1,
obj_geo = GeomFromText(@var2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...