V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
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 · 2020-05-26 15:58:21 +08:00 · 3296 次点击
    这是一个创建于 1402 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    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 到底要如何表示?

    第 1 条附言  ·  2020-05-26 17:07:29 +08:00

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

    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 条回复    2020-05-26 20:22:47 +08:00
    qW7bo2FbzbC0
        1
    qW7bo2FbzbC0  
       2020-05-26 17:11:16 +08:00 via Android
    用 mongo 不行吗?
    Xusually
        2
    Xusually  
       2020-05-26 18:37:55 +08:00   ❤️ 1
    laball
        3
    laball  
       2020-05-26 18:55:41 +08:00
    ES 吧
    sadfQED2
        4
    sadfQED2  
       2020-05-26 19:55:18 +08:00 via Android
    Es pg mongo 对地理数据支持都很好,然而你却选择了 mysql
    xiangyuecn
        5
    xiangyuecn  
    OP
       2020-05-26 20:20:16 +08:00
    @Xusually #2 特意折腾了注册了个账号,回了一下这个帖子,哈哈。。。

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

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

    ST_IsEmpty(ST_GeomFromText('POINT(0 90)')) 不正常,不是空的
    xiangyuecn
        6
    xiangyuecn  
    OP
       2020-05-26 20:22:47 +08:00
    @hjahgdthab750 @laball @sadfQED2 不存在完美😁 就像修 1 个 bug 引出 10 个 bug 一样
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2719 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:41 · PVG 23:41 · LAX 08:41 · JFK 11:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.