我试图使用SQLyog IDE将表复制到mySql中的不同主机/数据库,在复制具有2个几何字段的表时遇到以下错误:
无法从发送到“几何体”字段的数据中获取几何体对象
关于这个错误还有其他几个SO问题,但大多数情况下,结论性的答案是,这可能是由于试图插入空字符串造成的(
this
在我的例子中,似乎与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字符集中的数据,而工作插入不包含(在几何数据类型术语中,它们的数据似乎设置为空/默认值)。
不工作的插入件有什么问题吗?只要看一下就知道了?
P、 一个团队成员声称他通过改变MySQL服务器的my来解决这个问题。ini文件-通过更改设置
max_allowed_packet
从4米(默认值)到100米。
# 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
我重新启动了我的机器,但这没有帮助,继续出现同样的错误。