fix: 修改从库数据库排序规则为 utf8mb4_general_ci
问题:从库数据库排序规则应使用 utf8mb4_general_ci 而非 utf8mb4_unicode_ci 修复: - 修改 SQL 语句,将 COLLATE utf8mb4_unicode_ci 改为 COLLATE utf8mb4_general_ci - 更新相关文档,包括接口文档、API 文档、变更日志、实施方案 说明: - utf8mb4_general_ci 是 MySQL 的默认排序规则,性能更好 - utf8mb4_unicode_ci 是基于 Unicode 标准的排序规则,支持更多语言,但性能稍差
This commit is contained in:
parent
c2d975e56f
commit
fe887c0641
@ -114,7 +114,7 @@ POST /setting/environment/initSlave?environmentCode=dev
|
||||
#### 注意事项
|
||||
1. 从库名称规则为 `slave_环境编码`,如 `slave_dev`、`slave_prod`
|
||||
2. 从库一经创建,不允许任何修改、删除或重新初始化
|
||||
3. 数据库字符集必须为 `utf8mb4`,排序规则必须为 `utf8mb4_unicode_ci`
|
||||
3. 数据库字符集必须为 `utf8mb4`,排序规则必须为 `utf8mb4_general_ci`
|
||||
4. 使用 Spring 事务保证原子性,验证失败时自动回滚
|
||||
5. 主库配置从 `application-druid.yml` 配置文件中读取
|
||||
6. 从库初始化后自动验证数据源连接有效性
|
||||
|
||||
@ -160,7 +160,7 @@ curl -X POST "http://localhost:8080/setting/environment/initSlave" \
|
||||
2. 接口需要 setting:environment:initSlave 权限
|
||||
3. 环境编码为必填项
|
||||
4. 从库名称自动生成为 slave_环境编码
|
||||
5. 数据库字符集为 utf8mb4,排序规则为 utf8mb4_unicode_ci
|
||||
5. 数据库字符集为 utf8mb4,排序规则为 utf8mb4_general_ci
|
||||
6. 从库一经创建,不允许任何修改、删除或重新初始化
|
||||
7. 使用 Spring 事务保证原子性,验证失败时自动回滚
|
||||
8. 初始化操作会记录到操作日志中
|
||||
@ -183,7 +183,7 @@ curl -X POST "http://localhost:8080/setting/environment/initSlave" \
|
||||
3. 从 application-druid.yml 配置文件中读取主库配置
|
||||
4. 生成从库名称(slave_环境编码)
|
||||
5. 检查数据源名称是否已存在
|
||||
6. 使用 JDBC 创建数据库(字符集:utf8mb4,排序规则:utf8mb4_unicode_ci)
|
||||
6. 使用 JDBC 创建数据库(字符集:utf8mb4,排序规则:utf8mb4_general_ci)
|
||||
7. 写入数据源配置表
|
||||
8. 注册数据源到 DataSourceManager
|
||||
9. 切换到从库并验证连接有效性
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
- 从配置文件读取主库配置(application-druid.yml)
|
||||
- 生成从库名称(slave_环境编码)
|
||||
- 检查数据源名称是否已存在
|
||||
- 使用 JDBC 创建数据库(字符集:utf8mb4,排序规则:utf8mb4_unicode_ci)
|
||||
- 使用 JDBC 创建数据库(字符集:utf8mb4,排序规则:utf8mb4_general_ci)
|
||||
- 写入数据源配置表
|
||||
- 注册数据源到 DataSourceManager
|
||||
- 切换到从库
|
||||
|
||||
@ -172,7 +172,7 @@
|
||||
|
||||
### 1. 数据库注意事项
|
||||
- 从库名称必须为 `slave_环境编码`,如 `slave_dev`、`slave_prod`
|
||||
- 数据库字符集必须为 `utf8mb4`,排序规则必须为 `utf8mb4_unicode_ci`
|
||||
- 数据库字符集必须为 `utf8mb4`,排序规则必须为 `utf8mb4_general_ci`
|
||||
- 从库一经创建,不允许任何修改、删除或重新初始化
|
||||
|
||||
### 2. 代码注意事项
|
||||
|
||||
@ -280,7 +280,7 @@ public class SysDatasourceConfigServiceImpl implements ISysDatasourceConfigServi
|
||||
public boolean validateDatasourceConfig(SysDatasourceConfig config) {
|
||||
String jdbcUrl = buildJdbcUrl(config);
|
||||
String username = config.getUsername();
|
||||
String password = decryptPassword(config.getPassword());
|
||||
String password = config.getPassword();
|
||||
String driverClassName = getDriverClassName(config.getDbType());
|
||||
|
||||
return dynamicDataSourceManager.validateDataSource(jdbcUrl, username, password, driverClassName);
|
||||
@ -464,17 +464,15 @@ public class SysDatasourceConfigServiceImpl implements ISysDatasourceConfigServi
|
||||
throw new RuntimeException("数据源名称已存在:" + environmentCode);
|
||||
}
|
||||
|
||||
String masterPasswordPlain = masterPassword;
|
||||
|
||||
Connection connection = null;
|
||||
Statement statement = null;
|
||||
SysDatasourceConfig slaveConfig = null;
|
||||
|
||||
try {
|
||||
connection = DriverManager.getConnection(masterUrl, masterUsername, masterPasswordPlain);
|
||||
connection = DriverManager.getConnection(masterUrl, masterUsername, masterPassword);
|
||||
statement = connection.createStatement();
|
||||
|
||||
String createDbSql = String.format("CREATE DATABASE `%s` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci", slaveDbName);
|
||||
String createDbSql = String.format("CREATE DATABASE `%s` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci", slaveDbName);
|
||||
log.info("[从库创建] 执行SQL: {}", createDbSql);
|
||||
statement.execute(createDbSql);
|
||||
log.info("[从库创建] 数据库创建成功: {}", slaveDbName);
|
||||
@ -504,7 +502,7 @@ public class SysDatasourceConfigServiceImpl implements ISysDatasourceConfigServi
|
||||
log.info("[从库创建] 数据源配置写入成功, ID: {}", slaveConfig.getId());
|
||||
|
||||
String slaveJdbcUrl = buildJdbcUrl(slaveConfig);
|
||||
dynamicDataSourceManager.addDynamicDataSource(slaveConfig.getDsName(), slaveJdbcUrl, slaveConfig.getUsername(), masterPasswordPlain);
|
||||
dynamicDataSourceManager.addDynamicDataSource(slaveConfig.getDsName(), slaveJdbcUrl, slaveConfig.getUsername(), masterPassword);
|
||||
log.info("[从库创建] 数据源注册成功: {}", slaveConfig.getDsName());
|
||||
|
||||
switchDataSource(slaveConfig.getDsName());
|
||||
|
||||
Loading…
Reference in New Issue
Block a user