将MySQL中混乱的编码导出SQL文件,并修正统一库表的编码

在此之前,可能因为不同人协作时,或者历史原因导致的,MySQL 数据库中库、表、字段都产生了不同的编码格式,可能存在同一份表很多字段编码都不一样。

如非特殊需要,这里需要将其转换编码统一为一个,方便管理,也能避免转码等应用时产生的问题。

1. 首先将数据库以SQL形式导出为文件

2. 清除SQL文件中所有关于设置表、设置字段的语句。

如果只是单个文件,通过notepad++或者emeditor之类的软件打开编辑,通过正则替换掉语句中设置编码的部分就行了。

为完整复制,下方正则加了【】括号,避免遗漏结尾的部分空格。

# 替换createtable 中 注释的部分
【DEFAULT CHARSET=\S+COLLATE=\S+ 】
# 替换表结尾中间部分
【DEFAULTCHARACTERSET \S+\s+COLLATE \S+ 】
# 替换表结尾尾巴,需要替换为;
【DEFAULT CHARSET=\S+COLLATE=[^;];+】
# 替换表结尾中间2
【DEFAULT CHARSET=\S+COLLATE=\S+】
# 替换表结尾中间3
【DEFAULTCHARACTERSET \S+COLLATE 】
# 替换字段中的语句
【CHARACTERSET \S+COLLATE \S+】
# 替换多余注释
【\n--[^\r\n]*】

如果SQL文件比较多,我临时写了个PHP脚本可以批量替换;

<?php$list = scandir(".");
foreach($listas$file){
	if(preg_match('/\.sql$/is', $file)){
		$raw = file_get_contents($file);
		
		//  DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci222 
		// DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci111 
		// CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci 字段中
		
		// DEFAULT CHARACTER SET \S+ COLLATE \S+
		
		$raw = preg_replace('/DEFAULT CHARSET=\S+ COLLATE=\S+ /is','',$raw);# create table注释
		$raw = preg_replace('/DEFAULT CHARACTER SET \S+\s+COLLATE \S+ /is','',$raw); #表结尾中间
		$raw = preg_replace('/DEFAULT CHARSET=\S+ COLLATE=[^;];+/is',';',$raw);# 表结尾尾巴
		$raw = preg_replace('/DEFAULT CHARSET=\S+ COLLATE=\S+/is','',$raw);# 表结尾中间2
		$raw = preg_replace('/DEFAULT CHARACTER SET \S+ COLLATE \S+/is','',$raw);# 表结尾中间3
		
		$raw = preg_replace('/CHARACTER SET \S+ COLLATE \S+/is','',$raw);#字段中
		$raw = preg_replace("/\n--[^\r\n]*/is","",$raw);
		$raw = preg_replace("/[\r\n]+;[\r\n]+/i","",$raw);
		
		file_put_contents($file,$raw);
		unset($raw);
		echo$file.PHP_EOL;
	}
}

3.新建或重建库,设置库的编码。

此时导入数据库,所有的表、字段因为没有特殊设置,会自动跟随库的编码,自此统一起来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据卷神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值