当前位置: 首页 > 科技观察

七步操作!教你正确替换MySQL数据库字符集

时间:2023-03-14 15:59:41 科技观察

作为资深DBA程序员,你在工作中会遇到这样的情况吗?由于前期规划不够,随着业务的发展,原有数据库的字符集不能满足业务的需要。要求。比如原来的业务系统使用的是utf8字符集,后期有存储表情的需求,此时uft8字符集不能满足业务需求。需要使用utf8mb4字符集。对于数据库迁移,源数据库和目标数据库的字符集不一致,需要在迁移前进行转换。在更改数据库的字符集时,我很认真(jian)(dan),总会出现各种问题,导致更换后数据库出现乱码!今天就和大家一起梳理一下如何正确更换数据库。字符集,下面将简单介绍一下数据库中不同字符集的转换过程。一步转换,消除乱码!常用字符集GBK是在国家标准GB2312的基础上扩展后兼容GB2312的标准。GBK的文字编码是用双字节表示的,即中英文字符都是用双字节表示的。为了区分中文,第一位设置为1。GBK包含所有汉字,是国家编码,通用性不如UTF8,但UTF8占用的数据库比GBK大。支持简体中文和繁体中文。utf8字符集:是UTF-8编码的Unicode字符集,每个字符占用1到3个字节。UTF-8包含了世界上所有国家都需要使用的字符。是国际编码,通用性强。utf8mb4字符集:是UTF-8编码的Unicode字符集,每个字符占用1到4个字节。可以覆盖BMP范围内的字符和增补字符。BMP范围内的字符编码与utf8字符集中的编码完全一致,长度也完全一致,所以utf8mb4字符集兼容utf8字符集。GB2312是GBK的子集,GBK是GB18030的子集。big5支持繁体中文转换过程下面模拟的是将latin1字符集的数据库修改为GBK的过程。其他字符集的转换过程类似。需要注意的是,要转换的目标字符集必须是源字符集的super或者目标字符集的范围包括源字符集的范围。1、导入表结构mysqldump-uroot-p--default-character-set=gbk-ddatabasename>createtb.sql其中--default-character-set=gbk表示连接到哪个字符集,-d表示只连接导出表结构,不导出数据。2.手动修改createtb.sql中表结构定义中的字符集为新的字符集。3.确保记录不再更新,导出所有记录使用选项转储大表。它强制mysqldump一次一行而不是所有行从服务器检索表行,并在输出之前将其缓冲到内存中。扩展插入:使用包含多个值列表的多行插入语法。这会使转储文件更小,并在重新加载文件时加快插入速度。no-create-info:不导出每个转储表的createtable语句。default-character-set=latin1:按照原始字符集导出所有数据。这样导出的文件中,所有汉字都是可见的,不会存为乱码。4.打开data.sql,将setnameslatin1改为setnamesbgk.5。使用新字符集创建新数据库。createdatabasedatabasenamedefaultcharsetbgk;6、创建表,执行createtab.sqlmysql-root-pdatabasename