导入修改排序规则的SQL时提示#1064 character_set_client语法错误
错误原因
你遇到的1064语法错误根源是修改排序规则时,误删了CREATE TABLE语句末尾的语句结束分号,导致数据库无法正确识别语句边界,把后续条件注释里的SET character_set_client = @saved_cs_client内容当成了CREATE TABLE语句的一部分,最终解析失败。
另外你修改后的SQL还存在一个隐性兼容问题:你指定的排序规则utf8mb4_unicode_520_ci属于utf8mb4字符集,但语句里写的默认字符集是utf8(即utf8mb3,最多存储3字节的UTF-8字符),二者不匹配,就算补上分号也会触发字符集与排序规则不兼容的报错。
修复方案
- 给
CREATE TABLE语句的末尾补上缺失的分号,明确标识语句结束 - 将表的默认字符集从
utf8修改为utf8mb4,和你指定的utf8mb4_unicode_520_ci排序规则匹配
修复后可正常执行的完整SQL如下:
DROP TABLE IF EXISTS `migration_versions`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `migration_versions` ( `version` varchar(255) COLLATE utf8mb4_unicode_520_ci NOT NULL, PRIMARY KEY (`version`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; /*!40101 SET character_set_client = @saved_cs_client */;
补充说明:语句里
/*!40101 ...... */格式的内容是MySQL/MariaDB专属的条件执行注释,仅当数据库版本高于4.1.1时才会执行注释内的逻辑,本身不存在语法问题,之前的报错完全是前序语句缺失结束符导致的解析异常。
内容的提问来源于stack exchange,提问作者J. Scott Elblein
相关产品推荐
相关产品推荐

