【背景】
最近需要在一个openstack虚拟机上部署一个软件,需要用到mariadb数据库,但是安装数据库,导入数据后发现在web上显示的数据库是乱码的。

【环境】
openstack-T集群。
openstack虚拟机上安装的是ubuntu18.04 LTS。
mariadb使用的目前(当时是2020年11月6日,创建完成后发现此mariadb数据库的版本是10.5.6-MariaDB-1:10.5.6+maria~focal)Docker Hub的latest标签的mariadb image。

【过程】
1、搭建好Ubuntu环境上的docker环境。
2、使用如下命令指定创建的mariadb数据库服务器端的编码,同时指定数据库用户root用户密码、创建了数据库用户admin用户并指定密码

docker run --name mariadb -p 3306:3306 \
  -v /opt/docker/mariadb_data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=root@123 \
  -e MYSQL_USER=admin \
  -e MYSQL_PASSWORD=admin@123 \
  -e MYSQL_ROOT_HOST=% \
  -d mariadb:10.5.6-focal   \
  --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

3、创建完mariadb容器后,不要马上导入数据。还要先进入容器先设置下数据库客户端等的编码格式,设置方式是修改以下文件

vi /etc/mysql/mariadb.conf.d/50-client.cnf

在[client] 部分下面插入内容:default-character-set=utf8mb4
4、重启下mariadb容器,查看mariadb相关编码

mysql -uroot -proot@123
#此时已经成功登录进数据库内,以下在数据库内操作
show variables like '%character%';

会发现mariadb相关编码已经变成如下(以下的变化是针对修改文件etc/mysql/mariadb.conf.d/50-client.cnf前后而言):
在这里插入图片描述
5、此时再执行向数据库中导入数据等操作(保证插入的数据也是采用utf8编码格式),这样导入的数据就不会是乱码的了。

【相关知识】
1、查看mariadb数据库版本

#登录到数据库内后
select version();

2、创建数据库并指定编码格式

create database test01 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐