CREATE TABLE `zone_area` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT NULL, `location` geometry DEFAULT NULL, `geohash` varchar(20) GENERATED ALWAYS AS (st_geohash(`location`,8)) VIRTUAL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COMMENT='区';
ALTER TABLE zone_area ADD COLUMN `geohash` varchar(20) GENERATED ALWAYS AS (st_geohash(`location`,8)) VIRTUAL;
字段: 使用geometry类型存储空间点数据;
存储: SET location = geomfromtext('point(108.9498710632 34.2588125935)'));
搜索: 查询方圆5公里数据? geohash字段是将二维通过geohash算法变成一维;
虚拟自增列 Generated Column是MySQL 5.7引入的新特性,Cenerated Column,就是数据库中这一列由其他列计算而得。
generated column always总是自动生成
FLOOR(X)表示向下取整,只返回值X的整数部分,小数部分舍弃。
CEILING(X) 表示向上取整,只返回值X的整数部分,小数部分舍弃。
#DECIMAL 四舍五入
SELECT CAST('123.456' AS DECIMAL) #123
SELECT CAST('123.456' AS DECIMAL(10,2)) #123.46
ROUND(X) -- 四舍五入
SELECT ROUND('123.456') #123
SELECT ROUND('123.456',2) #123.46