几何字段失败的SQLyog复制表无法从发送到GEOMETRY字段的数据中获取几何对象

时间:2016-11-23 08:59:50

标签: mysql spatial sqlyog

我尝试使用SQLyog IDE在mySql中执行复制表到不同的主机/数据库,并在复制具有2个几何字段的表时遇到以下错误:

  

无法从发送到GEOMETRY字段的数据中获取几何对象

关于此错误还有其他几个SO问题,但大多数情况下结论性答案是由于尝试插入空字符串(this文章声明几何字段接受NULL值)而可能发生这种情况。

就我而言,无论如何似乎与NULL或空字符串无关。

我能够找到因此错误而失败的第一个插入语句。这是它的样子:

(
    45,
    '2016-01-26 11:44:13',
    'a',
    '',
    0,
    0,
    3,
    100,
    1,
    1,
    -- 1st geometry field
    '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',
    -- 2nd geometry field
    '\0\0\0\0\0\0\0\0\0\0\0\0\0”¯oM¿”¯oM¿”¯oM¿”¯oM?”¯oM?”¯oM?”¯oM?”¯oM¿”¯oM¿”¯oM¿',
    'Geodata',
    - 1,
    - 1,
    1,
    - 1
)

另一个失败插入的另一个例子:

(
    13853,
    '2016-01-26 11:44:13',
    'test move',
    '',
    3,
    0,
    1251,
    0,
    1,
    0,
    '\0\0\0\0\0\0\0kÛÚeA@Lˆv¡@@',
    '\0\0\0\0\0\0\0\0\0\0\0\0\0¬Q^ÓdA@Ž„ì$Ø\n@@¬Q^ÓdA@Œ\0c@@)eW^eA@Œ\0c@@)eW^eA@Ž„ì$Ø\n@@¬Q^ÓdA@Ž„ì$Ø\n@@',
    'test move',
    - 1,
    - 1,
    2913,
    - 1
)

如果我将这些与复制表中的先前插入进行比较,这些插入执行没有错误(我在目标表中看到它们),这里的前两个是什么样的:

    (
        31,
        '2016-01-26 11:44:13',
        'Route 1',
        '',
        2,
        0,
        3,
        0,
        1,
        1,
        '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',
        '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',
        'Geodata',
        - 1,
        - 1,
        1,
        - 1
    ),
    (
        32,
        '2016-01-26 11:44:13',
        'Route 2',
        '',
        2,
        0,
        3,
        0,
        1,
        1,
        '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',
        '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',
        'Geodata',
        - 1,
        - 1,
        1,
        - 1
    )

我的眼睛在工作插件和非工作插件之间看到的唯一区别是后者包含I-do-not-know-charset中的数据,而工作插件不包含(他们的数据似乎是在几何数据类型术语中设置为null / default值。

您可以通过查看非工作插页来解决问题吗?

P.S。:一名团队成员声称他通过更改MySQL服务器的my.ini文件来解决这个问题 - 将设置max_allowed_packet从4M(默认)更改为100M。

# The maximum size of one packet or any generated or intermediate string, or any parameter sent by the
# mysql_stmt_send_long_data() C API function.
max_allowed_packet=100M

我重启了我的机器,但这没有帮助,继续得到同样的错误。

1 个答案:

答案 0 :(得分:0)

以下内容对于从SQLYog IDE执行Copy Table(s) To Different Host/Database没有帮助,但显示了正确的INSERT语句。

所以,回顾一下:

问题:如何在mySql中插入包含空间/几何字段的记录?

解决方案:如果要查询表以便将其记录复制到另一个表中,首先需要确保以适当的格式读取它们,格式可以由mySql函数GeomFromText,用于从文本表示形式创建空间/几何值。要在此类文本表示中读取空间值,您需要使用函数AsText

以下是插图:

enter image description here

然后,insert语句值只需要在函数GeomFromText的调用中包装这些空间对象文本表示,就像(对于多边形)

GEOMFROMTEXT('POLYGON((-84.4920600543037 10.4982373909963,-84.4920600543037 10.4984201128037,-84.4918773324963 10.4984201128037,-84.4918773324963 10.4982373909963,-84.4920600543037 10.4982373909963))')

所以现在将带有空间字段的表转储到另一个表中是一件简单的事情,可以通过SQL或简单的应用程序来实现(我所做的)。