Windows(Server)下安装配置utf8mb4编码的mysql数据库

为了优化旧项目,需要添加存储emoji内容的功能,因此,需要升级mysql数据库,下载新版数据库的方法就记录了,从安装和调试开始。

我使用的是目前官网最新的5.x系列的mysql-5.7.26-winx64,系统的话Win10和WinServer2012R2区别不大,介于我已经在我Win10上装好了,所以把在WinServer2012R2上的安装过程记录一下。

1. 解压压缩包

由于新版的mysql默认不提供配置文件,所以安装在哪可根据配置文件来变化,理论上来说可以直接copy文件夹后修改配置就能做到数据库的整体迁移。因为我这里是便宜的云服务器,只有一个C盘,所以我的mysql放在 C:Program Filesmysql-5.7.26-winx64 。

2. 新建my.ini

前面也说了,由于默认不提供配置文件,所以需要自行创建配置文件,放到mysql的根目录下,这里我的根目录就是 C:Program Filesmysql-5.7.26-winx64 。具体配置如下:

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
 
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=C:Program Filesmysql-5.7.26-winx64
# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
datadir=C:Program Filesmysql-5.7.26-winx64data
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

collation-server=utf8mb4_unicode_ci
init_connect=SET NAMES utf8mb4
character-set-client-handshake = FALSE
explicit_defaults_for_timestamp=true

[client]
default-character-set=utf8mb4

3. 执行初始化、安装等指令

(1)用管理员身份运行cmd:

(2)进入mysql的bin目录:

cd C:Program Filesmysql-5.7.26-winx64in

(3)初始化数据库:

./mysqld --initialize --console

(4)初始化成功后记录root初始密码,稍后登录用,如下图:

(5)执行安装:

./mysqld install

安装成功如图

(6)(5.7系需要)初始化data目录:

./mysqld --initialize-insecure

并不一定要执行,是在data目录无法被初始化时的手动指令,若已有如图的data目录,则无需再执行。

(7)启动服务:

net start mysql

到此,安装就结束了。

4. 修改root访问主机权限

(1)登录数据库,还是在bin目录下:

./mysql -u root -p

(2)进入mysql数据库:

use mysql

(3)修改root的host字段设置为%:

update user set host = % where user = root;

(4)开放远程连接权限:

flush privileges;

(5)修改密码:

SET PASSWORD FOR root@% = PASSWORD(密码填这里);

这之后可以使用你本地的工具去连服务器上的数据库了,改密码、建新用户、建数据库、导数据等操作都直接用工具完成。

5. 新建编码为utf8mb4的数据库

以上图的编码和排序规则新建数据库后,将旧库中转储的.sql文件导入该库中。

6. 修改原表的编码

因为原数据库为utf-8编码,为3个字节,而emoji为4个字节,所以无法存储。而旧库迁移过来的表,表编码还是utf-8,因此也要将表编码修改为utf-8mb4。进入对应要修改的库,用需要修改的表面替换下面脚本中的table_name即可。

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

若不想所有字段都修改为utf8mb4,可以指定字段修改。

ALTER TABLE table_name CHANGE column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

7. 提醒

用工具连接会无法插入emoji内容到表中,需要用脚本导入或者程序插入。

经验分享 程序员 微信小程序 职场和发展