You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在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的首字母)附近触发语法错误。

  • 手动修复核心语法问题

    1. 调整开头的USE语句:把USE [DatabaseName];改成USE databasename;(去掉方括号,数据库名小写也没问题,MariaDB不区分大小写),或者干脆删掉这行,在phpMyAdmin里先选中要导入的目标数据库再执行导入操作。
    2. 清理SQL Server特有的批处理符:删掉所有的GO语句,MariaDB不需要这个来分隔批处理指令。
    3. 替换不兼容的数据类型和函数:
      • NVARCHAR换成VARCHARNCHAR换成CHAR
      • INT IDENTITY(1,1)改成INT AUTO_INCREMENT
      • GETDATE()换成NOW()GETUTCDATE()换成UTC_TIMESTAMP()
    4. 处理对象名的包裹符:把所有[表名][列名]的方括号换成反引号`,或者直接去掉(如果对象名不是MariaDB的关键字的话)。
  • 用工具自动转换更省心
    如果手动改太麻烦,推荐用数据库迁移工具来处理:

    • 用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

火山引擎 最新活动