Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQLyog Copy Table with geometry field失败,无法从发送到geometry field的数据中获取geometry对象_Mysql_Spatial_Sqlyog - Fatal编程技术网

Mysql SQLyog Copy Table with geometry field失败,无法从发送到geometry field的数据中获取geometry对象

Mysql SQLyog Copy Table with geometry field失败,无法从发送到geometry field的数据中获取geometry对象,mysql,spatial,sqlyog,Mysql,Spatial,Sqlyog,我正在尝试使用SQLyog IDE将表复制到mySql中的不同主机/数据库,在复制具有2个几何字段的表时遇到以下错误: 无法从发送到“几何体”字段的数据中获取几何体对象 关于这个错误还有几个其他的SO问题,但大多数情况下,结论性的答案是,这可能是因为试图插入空字符串(文章声称几何字段接受空值) 在我的例子中,似乎与NULL或空字符串没有任何关系 我能够找到第一条因此错误而失败的insert语句。下面是它的样子: ( 45, '2016-01-26 11:44:13', '

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

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

关于这个错误还有几个其他的SO问题,但大多数情况下,结论性的答案是,这可能是因为试图插入空字符串(文章声称几何字段接受空值)

在我的例子中,似乎与NULL或空字符串没有任何关系

我能够找到第一条因此错误而失败的insert语句。下面是它的样子:

(
    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
)
如果我将这些插入与复制表中执行时没有错误的先前插入进行比较(我在目标表中看到它们),那么前2个是这样的:

    (
        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-what字符集中的数据,而工作插入则不包含(它们的数据在几何数据类型术语中似乎设置为null/默认值)

只要看一下就可以知道非工作插件有什么问题吗?

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


我重新启动了我的计算机,但这没有帮助,继续出现相同的错误。

以下内容无助于从SQLYog IDE将表复制到不同的主机/数据库,但显示了正确的INSERT语句

因此,总结一下:

问题:如何在mySql中插入带有空间/几何字段的记录

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

下面是一个例子:

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

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


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

我尝试使用mySql Workbench转储,转储看起来像sqlYog的转储(workbench的一个展示了设置的使用——默认字符集=utf8,如果出现字符集问题,我不确定Unicode是否是utf8的选项).尝试了Workbench的架构传输向导,同样,复制此表失败,在相同的记录上出现相同的错误。插入失败的记录看起来是否相同(即奇怪的字符数据)复制之前在源数据库/表中?听起来可能是个愚蠢的问题,但回答它会排除源数据。您评论的第一个结果是,我发现mySql workbench对空间类型有更好的内置支持,因为它提供了几何体类型的可视显示:二进制格式,文本(支持4种标准的空间类型文本符号)和图像表示。谢谢你。我会尽快查看你的建议。
# 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