pangu-user-platform/backend/sql/fix_charset.sh

98 lines
3.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ============================================================
# 脚本名称fix_charset.sh
# 功能说明:修复数据库字符集和乱码问题
# 作 者pangu
# 创建时间2026-01-31
# 使用方法:./fix_charset.sh
# ============================================================
set -e
# 数据库配置
DB_HOST="8.148.25.55"
DB_PORT="3306"
DB_USER="root"
DB_PASS="aly2024A"
DB_NAME="pguser-db"
echo "============================================================"
echo "数据库字符集检查与修复工具"
echo "============================================================"
echo ""
# 1. 检查数据库字符集
echo "1. 检查数据库字符集配置..."
mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --default-character-set=utf8mb4 -e "
SHOW VARIABLES LIKE 'character_set%';
" 2>&1 | grep -v "Warning"
echo ""
# 2. 检查sys_menu表字符集
echo "2. 检查sys_menu表字符集..."
mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --default-character-set=utf8mb4 "$DB_NAME" -e "
SELECT
TABLE_NAME,
TABLE_COLLATION,
COLUMN_NAME,
COLUMN_TYPE,
CHARACTER_SET_NAME,
COLLATION_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = '$DB_NAME'
AND TABLE_NAME = 'sys_menu'
AND COLUMN_NAME IN ('menu_name', 'remark');
" 2>&1 | grep -v "Warning"
echo ""
# 3. 测试查询菜单数据
echo "3. 测试查询菜单数据(检查是否有乱码)..."
mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --default-character-set=utf8mb4 "$DB_NAME" -e "
SELECT menu_id, menu_name, remark
FROM sys_menu
WHERE parent_id = 0
ORDER BY order_num;
" 2>&1 | grep -v "Warning"
echo ""
echo "4. 如果上面显示有乱码,是否修复表字符集?(y/n): "
read -p "" confirm
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
echo ""
echo "正在修复sys_menu表字符集..."
# 备份表
echo " - 创建备份表..."
mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --default-character-set=utf8mb4 "$DB_NAME" -e "
CREATE TABLE IF NOT EXISTS sys_menu_backup_charset AS SELECT * FROM sys_menu;
" 2>&1 | grep -v "Warning"
# 转换表字符集
echo " - 转换表字符集为utf8mb4..."
mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --default-character-set=utf8mb4 "$DB_NAME" -e "
ALTER TABLE sys_menu CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
" 2>&1 | grep -v "Warning"
echo ""
echo "✅ 字符集修复完成!"
echo ""
echo "验证修复结果:"
mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --default-character-set=utf8mb4 "$DB_NAME" -e "
SELECT menu_id, menu_name, remark
FROM sys_menu
WHERE parent_id = 0
ORDER BY order_num;
" 2>&1 | grep -v "Warning"
else
echo ""
echo "❌ 操作已取消"
fi
echo ""
echo "============================================================"
echo "检查完成!"
echo "============================================================"