1. 安装MariaDB. 二种方式, 使用默认源和自建官方源.

1.1 使用默认源

yum -y install mariadb-server mariadb-client

安装后执行, mysql_secure_installation是初始化

systemctl enable mariadb
systemctl start mariadb
mysql_secure_installation

1.2 使用自建官方源, 可安装MariaDB 10.5稳定版. 官方文档地址

vim /etc/yum.repos.d/MariaDB.repo

# MariaDB 10.7 CentOS repository list - created 2022-02-16 06:02 UTC
# https://mariadb.org/download/
[mariadb]
name = MariaDB
baseurl = https://tw1.mirror.blendbyte.net/mariadb/yum/10.7/centos7-amd64
gpgkey=https://tw1.mirror.blendbyte.net/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
yum install -y mariadb-server mariadb-client
systemctl enable mariadb
systemctl start mariadb
# 初始化
mysql_secure_installation

2. 设置MariaDB字符集. 需要设置1个文件my.cnf 即可

2.1 vim /etc/my.cnf 增加以下内容

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
init_connect='SET NAMES utf8mb4'
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

!includedir /etc/my.cnf.d
  • character-set-client-handshake=FALSE 可以影响collation_connection的结果为utf8mb4_unicode_ci,而不是utf8mb4_general_ci。当然,使用SET collation_connection = utf8mb4_unicode_ci或collation_connection = utf8mb4_unicode_ci也可以。
  • SET NAMES 指示客户端连接使用的字符集,即向服务器发送 SQL 语句的字符集。 character-set-server 设置服务器字符集。要正确使用 utf8mb4,需要确保客户端、服务器和连接都设置为 utf8mb4。
  • init_connect等所有其他有关字符集的默认设置都会继承自character-set-server,也即单独指定init-connect、character_set_client, character_set_results,character_set_connection等都是不必须的。因此,上面设置中的init_connect可以省略

3. 重启MariaDB, 连接数据库,检查字符集.

3.1 重启MariaDB

systemctl restart mariadb

3.2 连接数据库.

# 回车输入密码即可
mysql -uroot -hlocalhost -P3306 -p

3.3 检查字符集

show variables like '%character%';
show variables like '%collation%';

utf8mb4

4. 补充utf8mb4_unicode_ci和utf8mb4_general_ci区别, MySQL可以使用utf8mb4_0900_ai_ci, character_set_system是固定utf8不可更改.

4.1 utf8mb4_unicode_ci和utf8mb4_general_ci区别

utf8mb4_unicode_ci: 基于标准的Unicode来排序和比较,能够在各种语言之间精确排序,在特殊情况下,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法,所以兼容度比较高,但是性能不高。

utf8mb4_general_ci: 没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致,但是在比较和排序的时候速度更快。

4.2 MySQL可以使用utf8mb4_0900_ai_ci, 对应位置替换,show variables like ‘%character%’;与MariaDB一致,show variables like ‘%collation%’;

collation_connection          utf8mb4_0900_ai_ci
collation_database            utf8mb4_general_ci
collation_server              utf8mb4_0900_ai_ci
default_collation_for_utf8mb4 utf8mb4_0900_ai_ci

查询结果

msqlutf8mb4

character_set_system固定utf8格式, 不可更改.

参考 MariaDB官方支持字符集

创建用户和授权, 远程访问%

CREATE DATABASE testdatabase;
CREATE USER 'testuser'@'%' IDENTIFIED BY 'password';
# mariadb mysql.user view
SET Password FOR [email protected]'localhost' = password('password');
GRANT ALL ON testdatabase.* TO 'testuser'@'%';
FLUSH PRIVILEGES;

5. 修复优化所有数据库中所有表

mysqlcheck -u root -p --auto-repair --optimize --all-databases