#!/usr/bin/env python # -*- coding: utf-8 -*- """ 更新数据库表字符集为utf8mb4,以支持emoji和其他特殊字符 """ import logging from cryptoai.utils.db_manager import get_db_manager from sqlalchemy import text # 配置日志 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger('update_db_charset') def update_table_charset(): """更新数据库表字符集为utf8mb4""" try: # 获取数据库管理器 db_manager = get_db_manager() if not db_manager.engine: logger.error("数据库连接失败") return False # 创建会话 session = db_manager.Session() try: # 更新数据库字符集 session.execute(text("ALTER DATABASE CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;")) # 更新agent_feeds表字符集 session.execute(text(""" ALTER TABLE agent_feeds CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; """)) # 特别更新content列的字符集 session.execute(text(""" ALTER TABLE agent_feeds MODIFY content TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; """)) # 检查users表是否存在 result = session.execute(text(""" SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'users'; """)) table_exists = result.scalar() > 0 # 如果users表存在,更新其字符集 if table_exists: session.execute(text(""" ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; """)) # 特别更新nickname和mail列的字符集 session.execute(text(""" ALTER TABLE users MODIFY nickname VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; """)) session.execute(text(""" ALTER TABLE users MODIFY mail VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; """)) logger.info("成功更新users表字符集为utf8mb4") session.commit() logger.info("成功更新数据库表字符集为utf8mb4") return True except Exception as e: session.rollback() logger.error(f"更新数据库表字符集失败: {e}") return False finally: session.close() except Exception as e: logger.error(f"更新数据库表字符集失败: {e}") return False if __name__ == "__main__": update_table_charset()