导出SQL时应避开MariaDB不认的MySQL 8.0特性:取消勾选“添加DEFINER和SQL SECURITY”,将utf8mb4_0900_ai_ci替换为utf8mb4_unicode_ci(≥10.3)或utf8_general_ci(≤10.2),函数需补READS SQL DATA,导入前加SET NAMES utf8mb4。
导出SQL时就避开MariaDB不认的MySQL 8.0特性
phpmyadmin默认导出的sql文件,常含mariadb无法执行的语句,比如utf8mb4_0900_ai_ci排序规则、definer声明、或未标注函数特性的create function。mariadb(尤其10.3–10.6)根本不识别这些,直接报错停在第一行。
- 导出前,在phpMyAdmin「导出」页勾选「自定义」→「格式特定选项」→取消勾选「添加DEFINER和SQL SECURITY」
- 手动替换导出文件里的
utf8mb4_0900_ai_ci为utf8mb4_unicode_ci(MariaDB 10.3+支持)或utf8mb4_general_ci(兼容性更广) - 若含存储过程/函数,用文本编辑器在每个
CREATE FUNCTION语句的RETURNS后补上READS SQL DATA(MariaDB要求显式声明)
导入前必须删掉或重写DEFINER和SQL SECURITY
MariaDB默认禁用DEFINER,遇到DEFINER=`root`@`localhost` SQL SECURITY DEFINER这类语句会直接拒绝,报错类似You do not have the SUPER privilege——这不是权限问题,是语法被拒。
- 用
sed -i 's/DEFINER=`[^`]*`@`[^`]*`//g' dump.sql(Linux/macOS)或PowerShell命令批量清除 - 别只删
DEFINER留SQL SECURITY DEFINER:MariaDB对后者也敏感,一并删掉最稳妥 - 如果文件里有视图或事件,同样要删
DEFINER;否则导入卡在CREATE VIEW那行
字符集与collation必须降级适配MariaDB版本
MariaDB对排序规则比MySQL更保守。utf8mb4_0900_ai_ci在MariaDB 10.11之前完全不支持,强行导入会报Unknown collation;而utf8mb4_unicode_ci在10.3+才稳定,旧版需进一步降级。
- 查目标MariaDB版本:
SELECT VERSION(); - MariaDB ≤ 10.2:把所有
CHARSET=utf8mb4换成CHARSET=utf8,COLLATE=utf8mb4_unicode_ci换成COLLATE=utf8_general_ci - MariaDB ≥ 10.3:保留
utf8mb4,但统一把utf8mb4_0900_ai_ci替换成utf8mb4_unicode_ci - 导入前加
SET NAMES utf8mb4;到SQL文件开头,防乱码(即使表用utf8,这句也不冲突)
大文件导入时注意MariaDB的max_allowed_packet和sql_mode
phpMyAdmin上传大SQL文件失败,常见错误Incorrect format parameter或静默中断,本质是MariaDB服务端拒绝接收超长语句——和MySQL一样,但配置项名略有不同。
- 修改MariaDB配置文件(如
/etc/my.cnf.d/server.cnf),在[mysqld]段加:max_allowed_packet = 512M - 重启MariaDB:
sudo systemctl restart mariadb(不重启无效) - 检查当前
sql_mode是否含STRICT_TRANS_TABLES,它会让INSERT忽略字段多一个少一个都报错;临时导入可加SET sql_mode='';到SQL文件头部 - 文件超10MB建议跳过phpMyAdmin,改用命令行:
mariadb -u user -p database_name
真正容易被忽略的是:MariaDB对DEFINER和collation的容忍度远低于MySQL,哪怕只有一行不兼容,整个导入就会终止——不是跳过,是硬中断。处理必须前置,不能靠phpMyAdmin界面选项补救。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











