在phpMyAdmin中导入SQL Server数据库备份报错求助
解决SQL Server导出.sql文件导入MariaDB/phpMyAdmin的1064语法错误
我之前也踩过这个坑!SQL Server和MariaDB/MySQL的语法差异真的很容易导致这类报错,尤其是直接导出的.sql文件里有大量MariaDB不兼容的语法。针对你遇到的第1行'U'附近的错误,大概率是开头的USE语句格式不对,或者文件开头有SQL Server特有的内容,给你几个实用的解决步骤:
先定位错误根源:
打开你导出的.sql文件,看第1行附近的内容。通常SQL Server导出的文件开头会是USE [你的数据库名];,这里的方括号[]是SQL Server的专属语法,MariaDB不识别,直接就会在U(USE的首字母)附近触发语法错误。手动修复核心语法问题:
- 调整开头的USE语句:把
USE [DatabaseName];改成USE databasename;(去掉方括号,数据库名小写也没问题,MariaDB不区分大小写),或者干脆删掉这行,在phpMyAdmin里先选中要导入的目标数据库再执行导入操作。 - 清理SQL Server特有的批处理符:删掉所有的
GO语句,MariaDB不需要这个来分隔批处理指令。 - 替换不兼容的数据类型和函数:
- 把
NVARCHAR换成VARCHAR,NCHAR换成CHAR - 把
INT IDENTITY(1,1)改成INT AUTO_INCREMENT - 把
GETDATE()换成NOW(),GETUTCDATE()换成UTC_TIMESTAMP()
- 把
- 处理对象名的包裹符:把所有
[表名]、[列名]的方括号换成反引号`,或者直接去掉(如果对象名不是MariaDB的关键字的话)。
- 调整开头的USE语句:把
用工具自动转换更省心:
如果手动改太麻烦,推荐用数据库迁移工具来处理:- 用SQL Server自带的导出向导,选择MySQL/MariaDB作为目标数据库,它会自动转换大部分语法差异。
- 用Navicat、DBeaver这类可视化工具,直接连接两个数据库,通过数据迁移功能一键同步表结构和数据,比手动改SQL文件高效太多。
检查编码避免乱码导致的语法错误:
有时候SQL Server导出的文件是GBK或者其他编码,导入时phpMyAdmin识别错误会出现类似语法错误的问题。可以用Notepad++把文件转换成UTF-8无BOM格式再导入。
举个简单的转换例子:
原SQL Server语句:
USE [MyShop]; GO CREATE TABLE [Products] ( [ProductId] INT IDENTITY(1,1) NOT NULL, [ProductName] NVARCHAR(100) NOT NULL, [AddTime] DATETIME DEFAULT GETDATE(), CONSTRAINT PK_Products PRIMARY KEY CLUSTERED ([ProductId]) ); GO
转换成MariaDB兼容的语句:
USE myshop; CREATE TABLE `Products` ( `ProductId` INT AUTO_INCREMENT NOT NULL, `ProductName` VARCHAR(100) NOT NULL, `AddTime` DATETIME DEFAULT NOW(), PRIMARY KEY (`ProductId`) );
内容的提问来源于stack exchange,提问作者Thong Huynh




