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内容到表中,需要用脚本导入或者程序插入。