导出后导入phpMyAdmin报错#1959:无效角色规范
解决phpMyAdmin导出导入时的#1959 - Invalid role specification错误
原因分析
错误根源是导出的SQL语句中CREATE DEFINER=`` PROCEDURE部分的DEFINER被设为空字符串,而MySQL/MariaDB不允许空的角色规范。这通常是phpMyAdmin导出时未正确捕获存储过程/函数的定义者信息,或是导出操作的权限不足导致无法获取DEFINER的具体值。
快速修复方案
方法1:手动修改导出的SQL文件
打开导出的SQL文件,找到所有包含DEFINER=`` 的语句(比如你提供的CREATE DEFINER=`` PROCEDURE is_Edition_Valid...),直接删除DEFINER=`` 片段,修改后的语句如下:
CREATE PROCEDURE `is_Edition_Valid` (IN `year` INT) BEGIN IF(SELECT COUNT(*) FROM comitiva c WHERE c.Ano = year) < 24 THEN SELECT 'Menos de 24 Comitivas' AS 'Edição Invalida:' ; END IF;
修改完成后重新导入,此时会自动将执行导入操作的用户设为存储过程的DEFINER。
方法2:调整phpMyAdmin导出选项
后续导出时,在phpMyAdmin中选择自定义导出模式:
- 找到「创建选项」模块
- 取消勾选「添加DEFINER子句」选项
- 完成导出,这样生成的SQL文件不会包含DEFINER相关内容,导入时不会触发错误
方法3:使用MySQL命令行导出(替代phpMyAdmin)
若phpMyAdmin导出问题反复出现,可直接用mysqldump命令行工具导出,避免DEFINER异常:
mysqldump -u 你的用户名 -p --skip-definer fifa > fifa_backup.sql
--skip-definer参数会直接忽略DEFINER信息的导出,导入时同样默认使用当前操作用户作为对象定义者。
导入验证
导入完成后,可通过以下SQL确认存储过程是否正常创建:
SHOW PROCEDURE STATUS WHERE Db = 'fifa';
也可直接调用存储过程测试功能:
CALL is_Edition_Valid(2022);
内容的提问来源于stack exchange,提问作者Salvador Palma
相关产品推荐
相关产品推荐

