› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
xiangyuecn
V2EX  ›  MySQL

被 mysql 摁到地上使劲摩擦,请问 geometry POINT、POLYGON EMPTY 如何表示?

  •  
  •   xiangyuecn ·
    xiangyuecn · May 26, 2020 · 4712 views
    This topic created in 2313 days ago, the information mentioned may be changed or developed.

    先看普通写法,没有任何问题

    select ST_GeomFromText('POINT(1 2)'); -- POINT(1 2) 正常
    select ST_IsEmpty(ST_GeomFromText('POINT(1 2)')); -- 0 正常
    
    -- mysql 文档里面翻到的,找到的唯一一个能用 EMPTY 来写的
    select ST_IsEmpty(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY')); -- 1 正常
    

    再看 EMPTY 的写法,被摁倒地上摩擦

    select ST_GeomFromText('POINT EMPTY'); -- 报错 Invalid GIS data provided to function st_geomfromtext.
    
    -- 用 null 代替 GIS EMPTY ?
    select ST_GeomFromText(null); -- 就是 null
    select ST_IsEmpty(null); -- 返回的什么卵几把玩意?使用 null 完全不可用!
    

    换成 POLYGON 也是如此。

    没辙了,请问 mysql 里 geometry POINT 、POLYGON EMPTY 到底要如何表示?

    Supplement 1  ·  May 26, 2020

    翻了个遍文档,终于看到一小行字,定了结论:

    MySQL supports geometry types of Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, and GeometryCollection. Other geometry types are not supported.
    
    Only GeometryCollection can be empty. Such a value is stored with 0 elements.
    

    意思就是支持的所有类型中,只有GeometryCollection允许为EMPTY,mysql官方文档也稀烂,相关类型的文档里面压根就不提如何设置EMPTY格式。。。

    POINT EMPTY、POLYGON EMPTY 统一用GeometryCollection EMPTY,完事。但别扭,丢失了类型。

    6 replies  •  2020-05-26 20:22:47 +08:00
    qW7bo2FbzbC0
        1
    qW7bo2FbzbC0  
       May 26, 2020 via Android
    用 mongo 不行吗?
    laball
        3
    laball  
       May 26, 2020
    ES 吧
    sadfQED2
        4
    sadfQED2  
       May 26, 2020 via Android
    Es pg mongo 对地理数据支持都很好,然而你却选择了 mysql
    xiangyuecn
        5
    xiangyuecn  
    OP
       May 26, 2020
    @Xusually #2 特意折腾了注册了个账号,回了一下这个帖子,哈哈。。。

    他里面提到的用北极坐标当 EMPTY 使用,但这个并非 EMPTY,要自己逻辑里面特殊判断,就像 null 一样( null 是磨人的小妖精),需要额外的处理。

    ST_IsEmpty(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY')) 正常是空的

    ST_IsEmpty(ST_GeomFromText('POINT(0 90)')) 不正常,不是空的
    xiangyuecn
        6
    xiangyuecn  
    OP
       May 26, 2020
    @hjahgdthab750 @laball @sadfQED2 不存在完美😁 就像修 1 个 bug 引出 10 个 bug 一样
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2725 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 13:50 · PVG 21:50 · LAX 06:50 · JFK 09:50
    ♥ Do have faith in what you're doing.