mysql 5.6 计算两个地图坐标的距离

在MySQL 5.6中,可以使用以下公式来计算两个地图坐标之间的距离:

SELECT 
    (6371 * acos(cos(radians(lat1)) * cos(radians(lat2)) * 
    cos(radians(lng2) - radians(lng1)) + sin(radians(lat1)) * 
    sin(radians(lat2)))) AS distance
FROM 
    your_table
WHERE 
    your_table.id = your_id;

其中,lat1lng1是第一个坐标的纬度和经度,lat2lng2是第二个坐标的纬度和经度。your_table是你的表的名称,your_id是你要查询的记录的ID。

这个公式使用了余弦定理来计算两个点之间的距离。它将地球视为一个完美的球体,并假设它的半径为6371公里。

分类至 MySQL
0条评论

laravel 数据迁移文件给表添加注释

当还在用 laravel 8.x 的时候,在 migration 数据迁移文件中,给 mysql 表添加注释,需要增加一条 DB::statment( ) 语句:

DB::statement("alter table `test` comment '表注释'");

当你升级到 laravel 9.14.0 版本后,就不需要这样做了,可使用 $table->comment( ) 语句,如...

分类至 MySQL
0条评论

MySQL 命令行创建用户以及授权访问某个数据库

1、创建名为 demo 密码为 123456 的账户:

CREATE USER 'demo'@'%' identified by '123456';

其中 'demo'@'%' 其中的 % 表示该账户可以从任意 IP 登录,可以改成指定 IP 登录,如 'demo'@'192.168.1.125',或指定 IP 段 'demo'@'192.168.1.%'

2、把数据库 demodb 授权给该账户:

GRANT ALL PRIVILEGES ON `demodb`.* TO 'demo'@'%' WITH GRANT OPTION;

其中 `demodb`.* 表示授权数据库 demodb 的所有权限。

3、刷新权限缓存:

FLUSH PRIVILEGES;

别忘了执行这条指令,不然可能无法正常登录。

分类至 MySQL
0条评论

mysqldump 导出 emoji 表情损坏的解决办法

默认情况下,mysqldump 会以 utf8 作为字符集执行数据导出,如果记录中存在 emoji 表情符号,有可能导出后变成问号。 对于版本 5.5.4 以上的 mysqldump,可以手动指定 utf8mb4 作为默认字符集。

mysqldump --default-character-set=utf8mb4 ...

这样导出的 SQL 就能正常保存 emoji 符号了。

分类至 MySQL
0条评论

MySQL 字段类型 TEXT 不能设置默认值

某天,给表新增一个字段,类型为 TEXT,想设置默认值为空字符串,SQL 语句如下:

ALTER TABLE `table1` ADD `content` TEXT NOT NULL DEFAULT '';

执行的时候报错了: 

#1101 - BLOB, TEXT, GEOMETRY or JSON column 'content' can't have a default value

就是说,BLOB、TEXT、GEOMETRY、JSON 这些类型的字段是不能设置默认值的。这是由于 MySQL 5.7 默认启用了严格模式导致的。

...

分类至 MySQL
0条评论

MySQL 索引选择性

既然索引可以加快查询速度,那么是不是只要是查询语句需要,就建上索引?答案是否定的。因为索引虽然加快了查询速度,但索引也是有代价的:索引文件本身要消耗存储空间,同时索引会加重插入、删除和修改记录时的负担,另外,MySQL在运行时也要消耗资源维护索引,因此索引并不是越多越好。一般两种情况下不建议建索引...

分类至 MySQL
0条评论

sql 语句添加 force index() 强制使用指定索引

使用 sql 语句查询数据的时候,如果表里有好几个索引,mysql 优化器会自己判断使用哪个索引进行搜索。但是,where 条件比较复杂的时候,优化器使用的索引就不一定是最优索引了。

例如,最近有个需求,查询 4 月份每个商家的微信、支付宝营业额,sql 语句如下...

 

分类至 MySQL
0条评论

SQL 中 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN 区别

sql中的连接查询有inner join(内连接)、left join(左连接)、right join(右连接)、full join(全连接)四种方式,它们之间其实并没有太大区别,仅仅是查询出来的结果有所不同。

1.inner join,在两张表进行连接查询时,只保留两张表中完全匹配的结果集。

2.left join,在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记录。

3.right join,在两张表进行连接查询时,会返回右表所有的行,即使在左表中没有匹配的记录。

4.full join,在两张表进行连接查询时,返回左表和右表中所有没有匹配的行。

分类至 MySQL
0条评论

mysql left join 右表数据不唯一的情况解决方法

1.left join 基本用法

mysql left join 语句格式

A LEFT JOIN B ON 条件表达式

left join 是以A表为基础,A表即左表,B表即右表。

左表(A)的记录会全部显示,而右表(B)只会显示符合条件表达式的记录,如果在右表(B)中没有符合条件的记录,则记录不足的地方为NULL。

2.left join 右表数据不唯一解决方法

如果B表符合条件的记录数大于1条,就会出现1:n的情况,这样left join后的结果,记录数会多于A表的记录数

分类至 MySQL
0条评论