求助解决MySQL报错mysql.connector.errors.DatabaseError: 1273 (HY000): Unknown collation: 'utf8mb4_0900_ai_ci'及相关疑问
求助解决MySQL报错mysql.connector.errors.DatabaseError: 1273 (HY000): Unknown collation: 'utf8mb4_0900_ai_ci'及相关疑问
兄弟,我来帮你捋捋这个问题哈!首先这个报错的根源很明确:你当前用的数据库(Kali默认装的大概率是MariaDB或者旧版MySQL)不支持utf8mb4_0900_ai_ci这个排序规则——这个规则是MySQL 8.0才新引入的,而MariaDB或者低于8.0的MySQL压根没这个东西,所以才会报错。
下面给你一步步解决的办法,还有你关心的几个疑问:
一、先确认你的数据库版本
先打开MySQL命令行,输入SELECT VERSION();,看看输出结果是MySQL还是MariaDB,以及具体版本号,这样能更精准调整方案。
二、找到配置文件的位置
Kali里MySQL/MariaDB的配置文件一般在这几个地方,你挨个找找:
- 主配置文件:
/etc/mysql/my.cnf - 如果是MariaDB,服务端配置:
/etc/mysql/mariadb.conf.d/50-server.cnf - 自定义配置目录:
/etc/mysql/conf.d/下的.cnf文件
三、解决排序规则报错的两种方法
方法1:直接修改现有数据库和表的排序规则
如果你的爬虫用的数据库已经创建了,直接在MySQL命令行里操作:
- 先切换到目标数据库:
USE 你的数据库名; - 修改数据库的默认排序规则:
ALTER DATABASE 你的数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci; - 再修改每个表的排序规则(如果表已经建好了):
ALTER TABLE 你的表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
方法2:修改配置文件全局设置默认规则
这样后续新建的数据库和表都会自动用兼容的规则:
- 找到前面说的配置文件,打开后找到
[mysqld]区块,添加或者修改成下面的内容:
character-set-server = utf8mb4 collation-server = utf8mb4_unicode_520_ci
- 保存文件后,重启MySQL服务:
service mysql restart - 之后再运行你的爬虫,应该就不会报这个错了
四、关于MySQL Community Server和Kali默认安装软件的区别
Kali默认装的基本都是MariaDB,它是MySQL的分支,由原MySQL开发团队维护,语法上和MySQL完全兼容,但在一些细节上有差异:比如你遇到的排序规则,utf8mb4_0900_ai_ci是MySQL 8.0独有的,MariaDB用的是utf8mb4_unicode_520_ci这类兼容的规则;另外在默认配置、部分功能实现上也有小区别。
而MySQL Community Server是官方的开源版本,如果你安装的是8.0及以上版本,自带utf8mb4_0900_ai_ci这个排序规则,就不会出现这个问题了。
备注:内容来源于stack exchange,提问作者alson
相关产品推荐
相关产品推荐

