错误
SQL 查询:
CREATE TABLE wp_baiduseo_ai_lishi
(id
bigint(20) NOT NULL AUTO_INCREMENT,hexin
varchar(255) COLLATE utf8mb4_unicode_520_ci NOT NULL,guangjianci
varchar(255) COLLATE utf8mb4_unicode_520_ci NOT NULL,riqi
timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,neirong
text COLLATE utf8mb4_unicode_520_ci,jifen
varchar(255) COLLATE utf8mb4_unicode_520_ci DEFAULT ‘-0.35’,
UNIQUE KEY id
(id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
MySQL 返回: 文档
1273 – Unknown collation: ‘utf8mb4_unicode_520_ci’
错误点分析
此错误 #1273 - Unknown collation: 'utf8mb4_unicode_520_ci'
表明 MySQL 不支持 utf8mb4_unicode_520_ci
这种字符集排序规则。这往往是因为你所用的 MySQL 版本过低,utf8mb4_unicode_520_ci
是 MySQL 8.0 及更高版本才支持的排序规则。
优化点建议
你可以把 utf8mb4_unicode_520_ci
替换成低版本 MySQL 也支持的排序规则,像 utf8mb4_unicode_ci
这类通用的排序规则就可以。
修改后的代码
CREATE TABLE `wp_baiduseo_ai_lishi` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`hexin` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`guangjianci` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`riqi` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`neirong` text COLLATE utf8mb4_unicode_ci,
`jifen` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '-0.35',
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
修改后的代码把所有 utf8mb4_unicode_520_ci
都替换成了 utf8mb4_unicode_ci
,这样就能在较低版本的 MySQL 中执行该 SQL 语句了。
说明:是你当前使用的 MySQL 版本低。
utf8mb4_unicode_520_ci
是 MySQL 8.0 引入的排序规则,若你在执行 SQL 语句时收到 #1273 - Unknown collation: 'utf8mb4_unicode_520_ci'
报错,这意味着你当前的 MySQL 版本低于 8.0,无法识别该排序规则。
至于之前的版本,推测之前备份数据库的环境可能使用的是 MySQL 8.0 或更高版本,所以备份出来的 SQL 文件里包含了 utf8mb4_unicode_520_ci
排序规则。当你尝试在低版本 MySQL 环境中恢复这个备份时,就出现了不兼容的问题。
你可以通过以下命令查看当前 MySQL 版本:
SELECT VERSION();
若版本低于 8.0,你可以选择升级 MySQL 到 8.0 及以上版本,或者按照之前建议的那样,将 SQL 语句中的 utf8mb4_unicode_520_ci
替换为 utf8mb4_unicode_ci
来解决问题。
如何确定数据库备份文件是在哪个版本的 MySQL 环境下生成的?
可以通过以下几种方法来确定数据库备份文件是在哪个版本的 MySQL 环境下生成的:
1. 查看备份文件中的版本信息
- 备份文件为 SQL 格式:通常 SQL 备份文件开头会包含一些注释信息,里面可能会有 MySQL 版本号。你可以使用文本编辑器(如 Windows 下的记事本、Notepad++,Linux 下的 vim、nano 等)打开备份文件,搜索类似
MySQL dump
或者Server version
的关键字。示例如下:
-- MySQL dump 10.13 Distrib 5.7.36, for Linux (x86_64)
-- Server version 5.7.36
上述示例表明该备份文件是在 MySQL 5.7.36 版本下生成的。
2. 分析备份文件中的特定语法和特性
- 排序规则:不同版本的 MySQL 支持的排序规则有所不同。例如,
utf8mb4_unicode_520_ci
是 MySQL 8.0 及以上版本支持的排序规则,如果备份文件中使用了这个排序规则,那么备份环境大概率是 MySQL 8.0 或更高版本;而如果使用的是utf8mb4_unicode_ci
,则较旧版本(如 MySQL 5.5 及以上)也支持。 - 新特性语法:某些新的 SQL 语法或特性仅在特定版本之后才被支持。比如,窗口函数是 MySQL 8.0 引入的,如果备份文件中包含窗口函数的使用,那么备份环境必然是 MySQL 8.0 或更高版本。
3. 检查备份工具的日志或元数据
- 使用的备份工具:如果你是使用特定的备份工具(如 mysqldump、phpMyAdmin 等)来进行数据库备份,这些工具可能会在日志文件或者备份文件的元数据中记录备份时使用的 MySQL 版本信息。
- mysqldump:在使用 mysqldump 进行备份时,可以通过查看其命令执行的输出日志来获取相关信息。例如,在命令行中执行
mysqldump
命令后,其输出可能会包含 MySQL 版本信息。 - phpMyAdmin:在 phpMyAdmin 中进行备份时,它可能会在备份文件的注释部分或者在 phpMyAdmin 的操作日志中记录备份时的 MySQL 版本。
- mysqldump:在使用 mysqldump 进行备份时,可以通过查看其命令执行的输出日志来获取相关信息。例如,在命令行中执行
4. 尝试导入到不同版本的 MySQL 环境中
- 测试导入:可以选择几个不同版本的 MySQL 环境,尝试将备份文件导入其中。如果在某个版本中导入成功且没有出现因版本不兼容导致的错误,那么该备份文件很可能是在相近或更低版本的 MySQL 环境下生成的。不过这种方法比较繁琐,且可能会对测试环境的数据造成影响,需要谨慎操作。
总结:把 SQL 文件里的 utf8mb4_unicode_520_ci
替换成 utf8mb4_unicode_ci
,这样就能在当前的 MySQL 环境中正常导入备份数据了。