一、备份数据,导出sql文件
因为是在现有数据库上进行修改,所以先备份一下。可以使用mysqldump指令轻松备份备份Mysql数据库,其原理是读取数据库,将数据库的表结构、数据导出为sql语句,这些sql语句中包含了数据库里所有的内容,可以在新的数据库重建数据表、恢复数据等,这种导出sql语句的备份方式也称为逻辑备份。数据库还有另外的备份方式——物理备份,即直接复制原始文件进行备份,当然这里没必要纠结,直接逻辑备份就好。
这里分两步导出,表结构和数据分别导出。因为我们要更改字符集,而建表sql语句中包含了字符集信息,所以我们把表结构和数据分开导出,方便全局修改表的字符集。
1. 导出表结构
mysqldump -u root -p -d awesome > createdb.sql
- -u root -p 表示使用root用户连接mysql,通过密码验证
- -d表示mysqldump命令不创建INSERT语句,即不导出数据
- awesome是我的数据库名,表结构sql导出到了createdb.sql文件中
此时需要修改createdb.sql文件中建表语句中的字符集,打开文件,将其中的utf8替换为utf8mb4,vim下可以用指令 :%s/utf8/utf8mb4/g 一键替换:
2. 导出数据
mysqldump -u root -p --quick --no-create-info --extended-insert awesome > data.sql
- --quick 这个选项使得MySQL不会把整个导出的内容读入内存再执行导出,而是在读到的时候就写入导文件中
- --no-create-info 不要创建表结构的sql,和上一步骤互补的
- --extended-insert 表示长INSERT,多row在一起批量INSERT,提高导入效率
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
如果你的配置文件不在/etc/mysql目录,可以尝试使用指令locate my.cnf查找。
三、重建数据库并导入数据
1. 重建数据库
DROP DATABASE awesome;
CREATE DATABASE awesome DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
这一步需要谨慎!第一句先删除掉原有数据库,最好先使用第二条指令创建一个新的库进行测试,以确保备份的数据能正常恢复,awesome换成你自己的库名。
2. 创建库表并导入数据
mysql -u root -p awesome < createdb.sql
mysql -u root -p awesome < data.sql
至此,经过备份、修改字符集、重建数据库等步骤终于完成了数据库字符集的修改。此外使用ALTER指令可以分别修改数据库、表、字段的字符集,但是因为字段、表太多而略显繁琐。
咦,板栗好像睡着了🙄!
嘿——醒醒,醒醒~