从MySQL 5导入至MySQL 8时phpMyAdmin语法错误的解决方法
解决MySQL 5转MySQL 8时的CREATE TABLE语法错误
问题场景
从MySQL 5导出的数据库,通过phpMyAdmin导入MySQL 8时触发语法错误,报错信息如下:
You have an error in your SQL syntax; it seems the error is around: '(8000) NOT NULL DEFAULT ' {vm:vendorname} {vm:vendoraddress} ', `' at line 7
对应的出错表创建语句片段:
CREATE TABLE `lcjg6_virtuemart_vendors_en_gb` ( -- ... 其他字段 ... `vendor_letter_header_html` longtext(8000) NOT NULL DEFAULT '<h1>{vm:vendorname}</h1><p>{vm:vendoraddress}</p>', `vendor_letter_footer_html` longtext(8000) NOT NULL DEFAULT '<p>{vm:vendorlegalinfo}<br />Page {vm:pagenum}/{vm:pagecount}</p>', -- ... 其他字段 ... ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
错误原因
MySQL的longtext属于大文本类型,本身不需要指定长度参数(括号里的8000是多余的)。MySQL 5对这类语法错误兼容性较高,会自动忽略无效的长度参数;但MySQL 8启用了更严格的语法校验,直接判定这种写法非法。
修正方案
把所有longtext(8000)的写法改成longtext即可,修正后的完整CREATE语句如下:
CREATE TABLE `lcjg6_virtuemart_vendors_en_gb` ( `virtuemart_vendor_id` int unsigned NOT NULL, `vendor_store_desc` text NOT NULL, `vendor_terms_of_service` text NOT NULL, `vendor_legal_info` text NOT NULL, `vendor_letter_css` text NOT NULL, `vendor_letter_header_html` longtext NOT NULL DEFAULT '<h1>{vm:vendorname}</h1><p>{vm:vendoraddress}</p>', `vendor_letter_footer_html` longtext NOT NULL DEFAULT '<p>{vm:vendorlegalinfo}<br />Page {vm:pagenum}/{vm:pagecount}</p>', `vendor_store_name` varchar(180) NOT NULL DEFAULT '', `vendor_phone` varchar(26) NOT NULL DEFAULT '', `vendor_url` varchar(255) NOT NULL DEFAULT '', `metadesc` varchar(400) NOT NULL DEFAULT '', `metakey` varchar(400) NOT NULL DEFAULT '', `customtitle` varchar(255) NOT NULL DEFAULT '', `vendor_invoice_free1` varchar(255) NOT NULL DEFAULT '', `vendor_invoice_free2` varchar(255) NOT NULL DEFAULT '', `vendor_mail_free1` varchar(255) NOT NULL DEFAULT '', `vendor_mail_free2` varchar(255) NOT NULL DEFAULT '', `vendor_mail_css` varchar(255) NOT NULL DEFAULT '', `slug` varchar(192) NOT NULL DEFAULT '', PRIMARY KEY (`virtuemart_vendor_id`), UNIQUE KEY `slug` (`slug`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
额外提示
如果导入时还有其他类似错误,检查所有TEXT类型(text/mediumtext/longtext)是否都被错误添加了长度参数,统一去掉即可。
内容的提问来源于stack exchange,提问作者Dilhan
相关产品推荐
相关产品推荐

