Error number: 4107; Symbol: ER_SRS_UNUSED_PROJ_PARAMETER_PRESENT; SQLSTATE: SR002
Message: The spatial reference system definition for SRID %u contains unused projection parameter “%s”.
错误说明
MySQL错误4107,即ER_SRS_UNUSED_PROJ_PARAMETER_PRESENT指示存在无用的投影参数(projection parameters),但未使用它们。此报错中,术语“投影”指的是在框架内表的布局,这些表示把表中的数据映射为要查询的元素,其中一些可用于比较和分组查询。
常见案例
此错误通常在使用MySQL V8.0,并使用JSON格式查询数据时发生。当用户向语句中添加参数来投影查询结果时,但这些参数未被使用,就会发生此错误。在其他情况下,当用户使用外部函数通过SELECT语句时,此错误也可能发生。例如,以下查询可能会导致此错误:
SELECT
col1,
col2,
JSON_EXTRACT(col3,”$.foo”)
FROM table_name
解决方案
解决此错误的最佳方法是确保所有传递给MySQL的参数都是必需的。如果不是必需的,就应该删除它们,以避免发生此错误。有时,用户也可能需要添加*号,以选择所有字段,以满足MySQL语句的格式和要求。
在很多情况下,用户也可以尝试使用GROUP BY语法,而不是PROJECT引擎,来解决此错误。例如,考虑下面的查询,该查询可以替换成GROUP BY来解决:
SELECT
col1,
col2,
JSON_EXTRACT(col3,”$.foo”)
FROM table_name
可以替换为:
SELECT col1, col2, JSON_EXTRACT(col3,”$.foo”)
FROM table_name
GROUP BY col1, col2;
尽管只有在使用JSON查询时,GROUP BY 可以解决此错误,但其他情况下,此方法可能不管用。此外,如果此错误发生在MySQL函数中,用户可以尝试将它们移动到外部函数中,以避免此错误。
一般来说,检查查询以确保每个参数都是必需的,并确保每个参数只有在需要时才被使用,可以有效解决此类错误。同时,内部函数可以有效防止此错误。