ジオスペース機能がビューに含まれていると、MySQL上のビューを作成すると無効な関数名が生成されるようです(MySQLはAmazon EC2/Amazon Linux上で実行されています)。MySQL Create Viewが地理空間関数名を破壊するのを防ぐには?
問題は、st_pointが有効なMySQL関数ではないことが明らかです。
mysql> select st_point(1,1);
ERROR 1305 (42000): FUNCTION wordpress.st_point does not exist
質問はなぜ起こるのですか。それをどうやって止めるのですか?
次は、この問題が発生しているコンピュータにインストールされているパッケージの一覧です。
sudo yum list installed | grep mysql
mysql-config.x86_64 5.5.51-1.11.amzn1 @amzn-updates
mysql56.x86_64 5.6.32-1.16.amzn1 @amzn-updates
mysql56-common.x86_64 5.6.32-1.16.amzn1 @amzn-updates
mysql56-devel.x86_64 5.6.32-1.16.amzn1 @amzn-updates
mysql56-embedded.x86_64 5.6.32-1.16.amzn1 @amzn-updates
mysql56-errmsg.x86_64 5.6.32-1.16.amzn1 @amzn-updates
mysql56-libs.x86_64 5.6.32-1.16.amzn1 @amzn-updates
mysql56-server.x86_64 5.6.32-1.16.amzn1 @amzn-updates
php70-mysqlnd.x86_64 7.0.9-1.14.amzn1 @amzn-updates
古いMySQLのパッケージと同様のコンピュータでは、この問題を示さない - しかし、私は新しい地理空間機能にアクセスするためのMySQLの新しいバージョンを必要としています。
古いコンピュータで同じテスト。
mysql> create view test as select point(1,1);
Query OK, 0 rows affected (0.00 sec)
mysql> select * from test;
+---------------------------+
| point(1,1) |
+---------------------------+
| ?? ?? |
+---------------------------+
1 row in set (0.00 sec)
mysql> show create view test;
+------+-----------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View | Create View | character_set_client | collation_connection |
+------+-----------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| test | CREATE ALGORITHM=UNDEFINED DEFINER=`eric`@`localhost` SQL SECURITY DEFINER VIEW `test` AS select point(1,1) AS `point(1,1)` | utf8 | utf8_general_ci |
+------+-----------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
1 row in set (0.00 sec)
mysql> drop view test;
Query OK, 0 rows affected (0.00 sec)
古いコンピュータのパッケージ。
sudo yum list installed | grep mysql;
mysql.noarch 5.5-1.6.amzn1 @amzn-main
mysql-config.x86_64 5.5.51-1.11.amzn1 @amzn-updates
mysql-devel.noarch 5.5-1.6.amzn1 @amzn-main
mysql-server.noarch 5.5-1.6.amzn1 @amzn-main
mysql55.x86_64 5.5.51-1.11.amzn1 @amzn-updates
mysql55-devel.x86_64 5.5.51-1.11.amzn1 @amzn-updates
mysql55-libs.x86_64 5.5.51-1.11.amzn1 @amzn-updates
mysql55-server.x86_64 5.5.51-1.11.amzn1 @amzn-updates
php-mysql.x86_64 5.3.29-1.8.amzn1 @amzn-updates
何が欠けていますか?
UPDATE:@Michaelは5.6.27のようGeomFromText
作品を述べたように、この問題は、MySQLバージョン5.6.10+
それを5.6(これはおそらく 'sql/item_geofunc.h'にあります)でこれを突破したようです。考えられる回避策は 'GeomFromText()'を使うことです: 'CREATE VIEW v1 AS SELECT GeomFromText( 'POINT(1 1)')AS my_point;'これは正しく動作し、 'X()'と 'Y()'関数がビューの結果から内側の値を正しく抽出するという事実から明らかなように、 'POINT'を返します。 –