MYSQL数据库中运行SQL文件报错

报错显示

当使用mysql数据库运行SQL文件报错时

[Err] 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'

报错原因

  • 版本高低问题,一个是5.7版本,一个是8.0版本
  • 生成转储文件的数据库版本为8.0,要导入sql文件的数据库版本为5.7,因为是高版本导入到低版本,引起1273错误 

解决方法

使用notepad++文本编辑器(windows免费,支持多种编辑语言,有完整的中文化接口,使用UTF-8编码)

打开sql文件,将文件中的所有
utf8mb4_0900_ai_ci全部替换为utf8_general_ci
utf8mb4全部替换为utf8 

然后保存,再次运行SQL文件,如果运行未成功,可能修改时没修改完全或者单词修改错误

打开notepad++,选中要改变的字段,快捷键ctrl+F

 

查看自己mysql版本

### MySQL 导入 SQL 文件 错误 1067 的解决方案 错误 `1067` 通常表示在执行 SQL 脚本时遇到了无效的默认值或其他语法问题。以下是针对该问题的具体分析和解决方法: #### 一、检查 SQL 文件中的字段定义 如果 SQL 文件中存在非法的默认值(例如,日期类型的字段设置了不合法的默认值),可能会触发此错误。可以通过以下方式排查并修复: - 打开 SQL 文件,查找涉及 `DEFAULT` 关键字的部分。 - 如果发现类似 `DEFAULT '0000-00-00'` 或其他不符合标准的默认值,则将其更改为合法值或移除默认值声明。 对于严格模式下的 MySQL 数据库,可以尝试临时关闭严格模式来绕过此类问题[^1]。 ```sql SET GLOBAL sql_mode = ''; ``` #### 二、调整 MySQL 配置参数 某些情况下,错误可能源于服务器配置不当。通过修改 `my.ini` 文件中的相关参数,能够有效解决问题: - **max_allowed_packet**: 增加最大数据包大小以支持更大的单条记录长度。 ```ini [mysqld] max_allowed_packet=512M ``` 上述设置需重启 MySQL 服务才能生效[^4]。 - **sql-mode**: 如前所述,在必要时禁用严格模式可避免因默认值引发的冲突。 ```ini [mysqld] sql-mode="" ``` 完成更改后保存文件,并重新启动数据库引擎[^3]。 #### 三、验证目标表结构一致性 确保正在导入的目标数据库已经创建好相应的空表格,并且其架构完全匹配源系统的描述。如果不一致的话也可能造成类似的编号类异常提示信息出现。 另外需要注意的是,不同版本之间可能存在兼容性差异;因此建议始终选用与导出环境相吻合的应用程序组件以及驱动程序版本组合来进行操作处理过程[^2]。 最后提醒一点就是关于字符集方面的问题——假如原始备份当中包含了大量非 ASCII 字符串内容而当前实例却未正确指定编码形式的话同样容易引起各种莫名其妙状况发生所以最好提前确认清楚再行动起来吧! ```python # 示例 Python 脚本用于自动化部分流程 import os def modify_config(file_path, key, value): with open(file_path, 'r') as file : lines = file.readlines() found = False for i,line in enumerate(lines[:]): if line.startswith(key+"="): lines[i]=key+'='+value+'\n' found=True if not found: lines.append('\n'+key+'='+value) with open(file_path,'w')as file: file.writelines(lines) modify_config('C:\\ProgramData\\MySQL\\MySQL Server 5.7\\my.ini', '[mysqld]', '') modify_config('C:\\ProgramData\\MySQL\\MySQL Server 5.7\\my.ini', 'max_allowed_packet', '512M') os.system("net stop mysql && net start mysql") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值