core icon indicating copy to clipboard operation
core copied to clipboard

Migrations fail in MySQL 8.4

Open trckster opened this issue 1 year ago • 1 comments

🐞 Bug Report

Required Information

? !
Operating system Docker: php:8.3-cli
PHP Telegram Bot version 0.82
PHP version 8.3
MySQL version 8.4
Update Method - (don't even start bot)
Self-signed certificate -
RAW update (if available) -

Summary

Migrations aren't working for MySQL 8.4. Error occurs during creation telegram_update table:

Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 6125 Failed to add the foreign key constraint. Missing unique key for constraint 'telegram_update_ibfk_11' in the referenced table 'poll_answer' in /app/vendor/illuminate/database/Connection.php:587

Everything works well if I use MySQL version 8.3, so I'm supposing that database developers changed something and now migrations stopped working.

Current behaviour

Migrations crashing. image

How to reproduce

Apply migration in MySQL 8.4.

Expected behaviour

Migrations finish successfully.

trckster avatar May 16 '24 09:05 trckster

Temporary workarround is

SET GLOBAL restrict_fk_on_non_standard_key = 'OFF'

This is because

Nonstandard foreign keys. The use of non-unique or partial keys as foreign keys is nonstandard, and is deprecated in MySQL. Beginning with MySQL 8.4.0, you must explicitly enable such keys by setting restrict_fk_on_non_standard_key to OFF, or by starting the server with --skip-restrict-fk-on-non-standard-key.

restrict_fk_on_non_standard_key is ON by default, which means that trying to use a nonstandard key as a foreign key in a CREATE TABLE or other SQL statement is rejected with ER_WARN_DEPRECATED_NON_STANDARD_KEY. Setting it to ON allows such statements to run, but they raise the same error as a warning.

from: https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html

dva-re avatar Sep 11 '24 17:09 dva-re