问题标签 [mysql-8.0]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - 在 MySQL 8 中使用点数据类型和 st_distance_sphere 查找最近的地方
我有一张桌子叫place
:
该coordinates
列属于点数据类型。我使用以下方法将点插入place
表中:
请注意,我已经使用了 SRID。
给定任何坐标,我想找到离它最近的地方(按升序排列)。我目前提出的解决方案(通过阅读 MySQL 文档)如下所示:
在查看了这里和其他地方的无数类似问题之后,很明显这是一种鲜为人知(和更新的方式)的做事方式,因此没有太多内容,因此我正在寻找一些澄清。
我的问题是:
- 这是最好的解决方案/我这样做对吗?
- 这种方法会利用我在
coordinates
列上的空间索引吗? - 使用st_distance_sphere时,是否需要指定地球的半径才能获得准确的结果?(编辑:不,它默认使用地球的半径)
编辑,以下是这些答案:
explain select ...;
返回:
flush status; select ...; show session status like 'Handler%';
返回:
mysql - MySQL 8 - DROP 或 ALTER 导致错误 3664 (HY000): 无法设置 SDI
DROP
每当尝试数据库或ALTER
表时,我都会遇到此错误。我无法删除或更改我创建的任何表。
现在,真正有趣的是,这些错误仅在重新启动 MySQL 并随后登录(由 root 用户)到 MySQL 之后发生。这是模式:
- 以 root 用户身份登录 MySQL。
- 创建数据库并创建表。
DROP
ALTER
没有问题的数据库或表:)- 退出 MySQL
- 重新启动 MySQL(停止然后启动)
- 以 root 用户身份登录 MySQL。
- 尝试访问我之前创建
DROP
的数据库或ALTER
表时出现错误 3664,阻碍任何DROP
或ALTER
:(
似乎 MySQL 的重新启动允许它识别新的数据库和表更改并更新与我想要更改的数据库表和表空间相关的某种SDI(序列化字典信息)元数据。InnoDB
不知何故,这种对 SDI 信息的识别阻碍了我的ALTER
命令DROP
。这可能是 MySQL 中的错误吗?或者,我的 root 用户是否无权运行修改 SDI 数据的命令?(尽管文档说 SDI 数据是由内部 API 修改的。)
每次我创建数据库和表时都会发生这种情况。所以,我对这个错误非常严重的解决方法:
- 手动删除数据目录下与数据库关联的数据文件。
- 调用
DROP DATABASE IF EXISTS MyDatabase;
(可能需要注销/登录几次,或重新启动 MySQL 并尝试使用SELECT
语句访问表以使其最终起作用) - 重新创建所需的数据库和表。
任何帮助将不胜感激!谢谢!
我在 Mac 上运行 MySQL 8.0.11 社区服务器。
没有解决方案的相同问题:无法删除数据库 mysql: ERROR 3664 (HY000)
triggers - 使用连接器/Python 创建触发器 - MySQL
此代码在 MYSQLWorkbench 中正常工作。
MYTABLE 有两列 (COL1,COL2)
我想通过 python 创建这个触发器,所以我在 python 中编写了这段代码:
但是会发生此错误:(((((((((((((((((((((((((((((((((((((((((())))
错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'delimiter // CREATE TRIGGER mytrigger BEFORE INSERT ON MYTABLE FOR EACH ROW' 附近使用正确的语法
请帮忙
mysql - MySQL 8.0 按性能分组
为了比较 MySQL 5.7 和 8.0,我使用 sysbench 创建了一个表。我尝试了测试。服务器的性能完全相同因此,oltp_point_select 表现出几乎相似的性能。
但是,在进行下面的分组测试时,MySQL 8.0 的性能提高了 10 倍。但我不知道为什么它很快。
不知道能不能找到 MySQL 8.0 Release Notes。在 8.0 中,谁能告诉我为什么 group by 更快?
0. 表架构
1. MySQL 5.7 Server 版本:5.7.17-log 源码分发
5.7 结果
2. MySQL 8.0 服务器版本:8.0.11 MySQL Community Server - GPL
结果
@Rick James 5.7 的 sbtest2 表被转储并应用于 8.0。现在两张表完全一样。
8.0
c# - 在 MySQL 数据库上运行迁移时出现实体框架错误。“空间/全文/哈希索引和显式索引顺序的错误使用”
问题
对新安装的 MySQL 数据库(对 SQL Server 数据库运行良好)运行迁移时,它在第一个创建表时失败并出现错误:
空间/全文/哈希索引和显式索引顺序的错误使用
当它尝试运行以下Index
方法时会发生这种情况:
使用-verbose
on 标志后Update-Database
,我看到导致此错误的命令如下。
在线搜索对于解决这个问题并不是很有用。我见过的最接近的是这个 Stack Overflow 问题,但它对我不起作用。
背景
对旧的(大约 3 年前)MySQL 数据库运行迁移工作正常,但是当我安装新的 MySQL 时,我收到有关密码身份验证的错误,这将通过更新 MySQL NuGet 包或强制用户使用旧的来解决密码。有关此问题,请参见此处。
我将我的 MySQL NuGet 包更新到了最新版本,这导致了一个不同的错误(可以在这里看到),我通过降级到比我开始使用但低于最新的包来解决这个错误,因为人们提到 API 不是正常工作。
所以在这个阶段它连接得很好,但似乎数据库本身不喜欢实体框架生成的索引命令。
如有必要,我很乐意提供更多信息。
版本
- MySql.Data 6.10.7
- MySql.Data.Entity 6.10.7
- 实体框架 6.2.0
- MySql 数据库 8.0.11 社区
更新
.Index()
我通过手动执行 SQL 命令并在针对 MySql 实例时替换调用,设法让它在 MySql 上运行。
然而,即使在显然成功地运行迁移之后,MySql.Data(.Entity) 仍然继续给出运行时错误。
将数据库恢复到 MySql 5 的先前主要版本时,代码可以完美运行,无需任何更改。
我会等待一段时间让 NuGet 包和 MySql 数据库更新,然后再试一试。
php - 如何解决错误:Laravel-MySql 中的 SQL 身份验证方法未知
我使用 docker,我有一个 Laravel Framework 5.5.25 容器和其他带有 mysql Ver 8.0.11 for Linux on x86_64 (MySQL Community Server - GPL) 的容器。在我的 docker compose 配置中,我有这个:
因此,当 Laravel 尝试连接到 MySql 时,出现此错误:
SQLSTATE[HY000] [2054] 服务器请求客户端未知的身份验证方法(SQL: select * from
mysql - 如何在 MySQL v8 中生成固定数量的行进行性能测试?
我正在尝试在 MySQL v8 中创建性能测试。为此,我需要生成固定数量的行,以便将它们插入到我的表中。
在 PostgreSQL 中,我会做类似的事情:
这里,random_string(int)
是一个自定义函数。在 MySQL 中,我可以使用https://stackoverflow.com/a/47884557/9740433中提到的东西,我想这已经足够了。
如何在 MySQL v8 中生成 100k 行?
mysql - 如何在 MySQL v8 中模拟 LATERAL JOIN 来为每一行执行子查询或连接?
我有两张桌子:
我现在想填写一张表格film_actor(film_id, actor_id)
,将每部电影与 250 个随机演员联系起来。所以每部电影应该有250个不同的演员。
在 PostgreSQL 中,我会这样做:
可以在此处找到 PostgreSQL 小提琴:https ://dbfiddle.uk/?rdbms=postgres_10&fiddle=6dc21a3ce3404aaf3f4453e2ee4f863b 。如您所见,每部电影都有不同的演员。
LATERAL JOIN
我在 MySQL v8 中找不到对 s 的支持。你怎么能在 MySQL v8 中做这样的构造?
可以在此处找到无法正常工作的 MySQL 小提琴:https ://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=6c1fb7df00cf8c73cbcca77752c9ef0d如您所见,每部电影都有相同的演员。
mysql - mysql 8 远程访问
我通常正确设置 MySQL 以进行远程访问。
目前我被 MySQL 8 卡住了。
首先是在 mysql.conf.d/mysqld.cnf 上,我没有任何 bind-address 行,所以我手动添加了它(bind-address 0.0.0.0)并且我授予用户访问权限'%'
当我连接时,我收到消息“身份验证失败”
但它在本地主机/命令行上运行良好
mysql - MySQL 8.0 lower_case_table_names 1
我正在新的 Ubuntu 18.04 VM 上设置 MySQL 8.0,但我无法将变量 lower_case_table_names 设置为 1 。我已经尝试像以前的版本一样更改 /etc/mysql/mysql.conf.d/mysqld.cnf [mysqld] 但没有成功并且无法重新启动 mysql 服务。这必须特定于 8.0,因为我可以在以前的版本中设置它。