Quellcode durchsuchen

fix: convert content-bearing VARCHAR columns to TEXT to prevent Data too long errors

- Changed all description, remark, notes, reject_reason, cancel_reason,
  audit_reason, summary, advice, overall_assessment, config_value fields
  from VARCHAR(255/500/200) to TEXT across ~40 tables
- Added idempotent modifyColumnToText() migrations in DatabaseInitializer
  (~55 ALTER TABLE MODIFY COLUMN calls) for production database sync
- Primary fix: activities.description was the original crash site but
  many other columns had the same truncation risk
Xiaogang Liao vor 3 Monaten
Ursprung
Commit
084e41af92

+ 114 - 0
cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java

@@ -3049,6 +3049,120 @@ log.info("已添加template_id列到tasks表");
         } catch (Exception e) {
             log.warn("检查/添加articles表审核字段失败: {}", e.getMessage());
         }
+
+        // 迁移20240709-01: content字段扩为TEXT - 用户输入内容可能超VARCHAR上限
+        // activities.description
+        modifyColumnToText("activities", "description", "活动描述");
+        // tasks.description
+        modifyColumnToText("tasks", "description", "任务描述");
+        // wishes.description, reject_reason, cancel_reason
+        modifyColumnToText("wishes", "description", "心愿描述");
+        modifyColumnToText("wishes", "reject_reason", "拒绝原因");
+        modifyColumnToText("wishes", "cancel_reason", "取消原因");
+        // reward_wishlists.description
+        modifyColumnToText("reward_wishlists", "description", "心愿描述");
+        // products.description, reject_reason
+        modifyColumnToText("products", "description", "商品描述");
+        modifyColumnToText("products", "reject_reason", "审核拒绝原因");
+        // product_orders.remark
+        modifyColumnToText("product_orders", "remark", "备注");
+        // articles.summary
+        modifyColumnToText("articles", "summary", "摘要");
+        // activities.audit_reason
+        modifyColumnToText("activities", "audit_reason", "驳回原因");
+        // guide_applications.reject_reason
+        modifyColumnToText("guide_applications", "reject_reason", "拒绝原因");
+        // guide_application_records.remark
+        modifyColumnToText("guide_application_records", "remark", "备注/原因");
+        // user_operation_log.description
+        modifyColumnToText("user_operation_log", "description", "操作描述");
+        // follow_up.description, teacher_review
+        modifyColumnToText("follow_up", "description", "描述");
+        modifyColumnToText("follow_up", "teacher_review", "规划师点评");
+        // energy_log.description
+        modifyColumnToText("energy_log", "description", "描述");
+        // sys_config.description
+        modifyColumnToText("sys_config", "description", "配置说明");
+        // points_log.description
+        modifyColumnToText("points_log", "description", "描述");
+        // insurance_policies.remark
+        modifyColumnToText("insurance_policies", "remark", "备注");
+        // health_reports.remark
+        modifyColumnToText("health_reports", "remark", "备注");
+        // guide_service_logs.notes
+        modifyColumnToText("guide_service_logs", "notes", "服务记录");
+        // guide_packages.description
+        modifyColumnToText("guide_packages", "description", "套餐说明");
+        // guide_package_templates.description
+        modifyColumnToText("guide_package_templates", "description", "说明");
+        // service_types.description
+        modifyColumnToText("service_types", "description", "描述");
+        // commission_records.remark
+        modifyColumnToText("commission_records", "remark", "备注");
+        // zodiac_pairing.description, advice
+        modifyColumnToText("zodiac_pairing", "description", "配对解读");
+        modifyColumnToText("zodiac_pairing", "advice", "相处建议");
+        // blood_type_pairing.description, advice
+        modifyColumnToText("blood_type_pairing", "description", "配对描述");
+        modifyColumnToText("blood_type_pairing", "advice", "相处建议");
+        // life_number_relationship.description, advice
+        modifyColumnToText("life_number_relationship", "description", "关系解读");
+        modifyColumnToText("life_number_relationship", "advice", "相处建议");
+        // daily_health_checkin.remark
+        modifyColumnToText("daily_health_checkin", "remark", "备注");
+        // health_sleep_record.remark
+        modifyColumnToText("health_sleep_record", "remark", "备注");
+        // health_exercise_record.remark
+        modifyColumnToText("health_exercise_record", "remark", "备注");
+        // finance_checkins.note
+        modifyColumnToText("finance_checkins", "note", "备注");
+        // guide_packages.description (old duplicate)
+        // assessment_appointments.remark
+        modifyColumnToText("assessment_appointments", "remark", "备注");
+        // withdrawal_requests.remark
+        modifyColumnToText("withdrawal_requests", "remark", "备注");
+        // supply_settlements.remark
+        modifyColumnToText("supply_settlements", "remark", "备注");
+        // content_sections.description
+        modifyColumnToText("content_sections", "description", "描述说明");
+        // education_systems.description
+        modifyColumnToText("education_systems", "description", "描述");
+        // dimension_config.description
+        modifyColumnToText("dimension_config", "description", "描述");
+        // energy_rules.description
+        modifyColumnToText("energy_rules", "description", "规则描述");
+        // team_goals.description
+        modifyColumnToText("team_goals", "description", "团队描述");
+        // product_dimension_config.remark
+        modifyColumnToText("product_dimension_config", "remark", "备注");
+        // indicator_values.remark
+        modifyColumnToText("indicator_values", "remark", "备注");
+        // tongue_records.overall_assessment
+        modifyColumnToText("tongue_records", "overall_assessment", "总体评估");
+        // system_config.description, config_value
+        modifyColumnToText("system_config", "description", "说明");
+        modifyColumnToText("system_config", "config_value", "配置值");
+        // supply_system.description
+        modifyColumnToText("supply_system", "description", "描述");
+        // supply_settlement.remark
+        modifyColumnToText("supply_settlement", "remark", "备注");
+        // growth_task.description
+        modifyColumnToText("growth_task", "description", "描述");
+        // distribution_systems.description
+        modifyColumnToText("distribution_systems", "description", "团队描述");
+        // mini_games.description
+        modifyColumnToText("mini_games", "description", "游戏描述");
+        // blood_type_config.description
+        modifyColumnToText("blood_type_config", "description", "性格描述");
+    }
+
+    private void modifyColumnToText(String table, String column, String comment) {
+        try {
+            jdbcTemplate.execute("ALTER TABLE " + table + " MODIFY COLUMN " + column + " TEXT COMMENT '" + comment + "'");
+            log.info("已修改{}.{}为TEXT类型", table, column);
+        } catch (Exception e) {
+            log.warn("修改{}.{}为TEXT失败: {}", table, column, e.getMessage());
+        }
     }
 
     private void initializeDefaultData() {

+ 45 - 45
cfc-backend/src/main/resources/schema.sql

@@ -71,7 +71,7 @@ CREATE TABLE IF NOT EXISTS tasks (
     executor_type VARCHAR(20) COMMENT '执行者类型: child/parent',
     executor_id BIGINT COMMENT '执行者ID',
     title VARCHAR(200) NOT NULL,
-    description VARCHAR(500),
+    description TEXT,
     points TINYINT DEFAULT 2 COMMENT '任务积分1-10',
     deadline DATETIME NOT NULL,
     repeat_type ENUM('none', 'daily', 'weekly') DEFAULT 'none',
@@ -98,8 +98,8 @@ CREATE TABLE IF NOT EXISTS points_log (
     task_id BIGINT,
     amount INT NOT NULL COMMENT '积分数量正负',
     type ENUM('earn', 'spend', 'bonus', 'penalty', 'adjust', 'reset', 'refund') NOT NULL,
-    category VARCHAR(20) DEFAULT 'task' COMMENT '积分分类: task-任务积分, system-系统积分',
-    description VARCHAR(255),
+    category VARCHAR(20) DEFAULT 'task' COMMENT '积分分类: task-任务积分, system-系统积分',
+    description TEXT,
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
     INDEX idx_child_id_created (child_id, created_at),
     INDEX idx_type (type)
@@ -476,7 +476,7 @@ CREATE TABLE IF NOT EXISTS reward_wishlists (
     user_id BIGINT NOT NULL COMMENT '创建者用户ID',
     family_id BIGINT NOT NULL COMMENT '家庭ID',
     title VARCHAR(100) NOT NULL COMMENT '心愿名称',
-    description VARCHAR(500) COMMENT '心愿描述',
+    description TEXT COMMENT '心愿描述',
     points_required INT NOT NULL COMMENT '所需积分',
     category VARCHAR(32) COMMENT '分类',
     image_url VARCHAR(255) COMMENT '图片链接',
@@ -883,7 +883,7 @@ CREATE TABLE IF NOT EXISTS guide_applications (
     bank_card VARCHAR(50) COMMENT '银行卡号',
     bank_name VARCHAR(100) COMMENT '开户行',
     status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '状态: pending-待审核, approved-已通过, rejected-已拒绝',
-    reject_reason VARCHAR(500) COMMENT '拒绝原因',
+    reject_reason TEXT COMMENT '拒绝原因',
     reviewed_at DATETIME COMMENT '审核时间',
     reviewed_by BIGINT COMMENT '审核人ID',
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
@@ -901,7 +901,7 @@ CREATE TABLE IF NOT EXISTS guide_application_records (
     action VARCHAR(50) NOT NULL COMMENT '操作: submit/approve/reject/withdraw/resubmit',
     from_status VARCHAR(20) COMMENT '操作前状态',
     to_status VARCHAR(20) NOT NULL COMMENT '操作后状态',
-    remark VARCHAR(500) COMMENT '备注/原因',
+    remark TEXT COMMENT '备注/原因',
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     INDEX idx_application_id (application_id),
     INDEX idx_user_id (user_id),
@@ -917,7 +917,7 @@ CREATE TABLE IF NOT EXISTS mini_games (
     id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
     game_code VARCHAR(20) NOT NULL UNIQUE COMMENT '游戏代码',
     game_name VARCHAR(50) NOT NULL COMMENT '游戏名称',
-    description VARCHAR(255) COMMENT '游戏描述',
+    description TEXT COMMENT '游戏描述',
     icon VARCHAR(50) COMMENT '图标emoji',
     default_duration INT DEFAULT 5 COMMENT '默认时长(分钟)',
     default_points INT DEFAULT 5 COMMENT '默认奖励积分',
@@ -967,7 +967,7 @@ CREATE TABLE IF NOT EXISTS user_operation_logs (
     user_id BIGINT COMMENT '用户ID',
     nickname VARCHAR(50) COMMENT '用户昵称',
     operation_type VARCHAR(20) NOT NULL COMMENT '操作类型: login/logout/create/update/delete/query等',
-    description VARCHAR(500) COMMENT '操作描述',
+    description TEXT COMMENT '操作描述',
     request_path VARCHAR(200) COMMENT '请求路径',
     request_method VARCHAR(10) COMMENT '请求方法',
     request_params TEXT COMMENT '请求参数(脱敏)',
@@ -1007,7 +1007,7 @@ CREATE TABLE IF NOT EXISTS wishes (
     created_by BIGINT COMMENT '创建者用户ID',
     creator_type VARCHAR(20) COMMENT '创建者类型: child/parent',
     title VARCHAR(200) NOT NULL COMMENT '心愿标题',
-    description VARCHAR(500) COMMENT '心愿描述',
+    description TEXT COMMENT '心愿描述',
     category VARCHAR(32) COMMENT '心愿分类',
     points_required INT COMMENT '所需积分',
     points_set_by BIGINT COMMENT '定价者ID',
@@ -1022,11 +1022,11 @@ CREATE TABLE IF NOT EXISTS wishes (
     child_confirmed_at DATETIME COMMENT '孩子确认收货时间',
     rejected_by BIGINT COMMENT '拒绝者ID',
     rejected_at DATETIME COMMENT '拒绝时间',
-    reject_reason VARCHAR(500) COMMENT '拒绝原因',
+    reject_reason TEXT COMMENT '拒绝原因',
     reject_count INT DEFAULT 0 COMMENT '被拒绝次数',
     cancelled_by BIGINT COMMENT '取消者ID',
     cancelled_at DATETIME COMMENT '取消时间',
-    cancel_reason VARCHAR(500) COMMENT '取消原因',
+    cancel_reason TEXT COMMENT '取消原因',
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
     INDEX idx_family_id (family_id),
@@ -1042,7 +1042,7 @@ CREATE TABLE IF NOT EXISTS wishes (
 CREATE TABLE IF NOT EXISTS products (
     id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
     name VARCHAR(200) NOT NULL COMMENT '商品名称',
-    description VARCHAR(1000) COMMENT '商品描述',
+    description TEXT COMMENT '商品描述',
     intro TEXT COMMENT '详细介绍',
     cover_image VARCHAR(500) COMMENT '封面图片',
     images TEXT COMMENT '多张图片JSON',
@@ -1053,7 +1053,7 @@ CREATE TABLE IF NOT EXISTS products (
     vendor_id BIGINT COMMENT '供应商ID',
     vendor_name VARCHAR(100) COMMENT '供应商名称',
     status VARCHAR(32) NOT NULL DEFAULT 'draft' COMMENT '状态: draft/pending/approved/rejected/on_shelf/off_shelf',
-    reject_reason VARCHAR(500) COMMENT '审核拒绝原因',
+    reject_reason TEXT COMMENT '审核拒绝原因',
     member_price INT COMMENT '会员价(分)',
     member_eligible VARCHAR(32) DEFAULT 'none' COMMENT '会员资格: all/budget/none',
     domain VARCHAR(32) COMMENT '五维领域: action/mind/body/wisdom/wealth',
@@ -1082,7 +1082,7 @@ CREATE TABLE IF NOT EXISTS product_orders (
     total_amount INT NOT NULL COMMENT '总金额(分)',
     status VARCHAR(32) NOT NULL DEFAULT 'pending' COMMENT '状态: pending/paid/completed/cancelled/refunded',
     payment_method VARCHAR(32) COMMENT '支付方式: wechat/points/membership',
-    remark VARCHAR(500) COMMENT '备注',
+    remark TEXT COMMENT '备注',
     paid_at DATETIME COMMENT '支付时间',
     supply_system_id BIGINT COMMENT '所属供应商体系ID',
     supplier_id BIGINT COMMENT '收款供应商用户ID',
@@ -1110,7 +1110,7 @@ CREATE TABLE IF NOT EXISTS sys_config (
     id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
     config_key VARCHAR(64) NOT NULL UNIQUE COMMENT '配置键',
     config_value TEXT COMMENT '配置值',
-    description VARCHAR(500) COMMENT '配置说明',
+    description TEXT COMMENT '配置说明',
     updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';
 
@@ -1142,7 +1142,7 @@ CREATE TABLE IF NOT EXISTS articles (
     id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键 ID',
     category_id BIGINT DEFAULT 0 COMMENT '所属分类 ID',
     title VARCHAR(200) NOT NULL COMMENT '标题',
-    summary VARCHAR(500) DEFAULT '' COMMENT '摘要',
+    summary TEXT DEFAULT '' COMMENT '摘要',
     cover_image VARCHAR(500) DEFAULT '' COMMENT '封面图 URL',
     content LONGTEXT COMMENT '富文本内容',
     tags VARCHAR(200) DEFAULT '' COMMENT '标签 JSON 数组',
@@ -1209,7 +1209,7 @@ CREATE TABLE IF NOT EXISTS energy_log (
     source_id BIGINT COMMENT '来源ID',
     ref_id BIGINT COMMENT '关联旧流水ID(覆盖时标记)',
     expires_at DATETIME COMMENT '过期时间(空=永不过期)',
-    description VARCHAR(500) COMMENT '描述',
+    description TEXT COMMENT '描述',
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     INDEX idx_child_dim (child_id, dimension_id),
     INDEX idx_created (created_at),
@@ -1245,7 +1245,7 @@ CREATE TABLE IF NOT EXISTS commission_records (
     profit_rate INT DEFAULT 0 COMMENT '利润率(千分比,如235=23.5%)',
     commission_amount INT NOT NULL COMMENT '佣金金额(分)',
     status VARCHAR(16) NOT NULL DEFAULT 'settled' COMMENT '状态: pending/settled',
-    remark VARCHAR(255) DEFAULT NULL COMMENT '备注',
+    remark TEXT DEFAULT NULL COMMENT '备注',
     created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     settled_at DATETIME DEFAULT NULL COMMENT '结算时间',
     withdrawn_at DATETIME DEFAULT NULL COMMENT '提现时间',
@@ -1263,7 +1263,7 @@ CREATE TABLE IF NOT EXISTS withdrawal_requests (
     status VARCHAR(16) NOT NULL DEFAULT 'pending' COMMENT '状态: pending/approved/rejected',
     audit_by BIGINT DEFAULT NULL COMMENT '审核人ID',
     audit_at DATETIME DEFAULT NULL COMMENT '审核时间',
-    remark VARCHAR(255) DEFAULT NULL COMMENT '审核备注',
+    remark TEXT DEFAULT NULL COMMENT '审核备注',
     created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     INDEX idx_user (user_id),
     INDEX idx_status (status)
@@ -1293,7 +1293,7 @@ CREATE TABLE IF NOT EXISTS service_types (
     id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
     name VARCHAR(100) NOT NULL COMMENT '类型名称',
     icon VARCHAR(50) COMMENT '图标',
-    description VARCHAR(500) COMMENT '描述',
+    description TEXT COMMENT '描述',
     sort_order INT DEFAULT 0 COMMENT '排序',
     status VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态: ACTIVE/DISABLED',
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
@@ -1321,7 +1321,7 @@ CREATE TABLE IF NOT EXISTS guide_package_templates (
     validity_months INT COMMENT '有效期(月)',
     reference_price INT COMMENT '参考价格(分)',
     min_price INT COMMENT '最低售价(分)',
-    description VARCHAR(500) COMMENT '说明',
+    description TEXT COMMENT '说明',
     status VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态: ACTIVE/DISABLED',
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
@@ -1349,7 +1349,7 @@ CREATE TABLE IF NOT EXISTS guide_packages (
     price INT NOT NULL COMMENT '销售价格(分)',
     validity_months INT COMMENT '有效期(月)',
     validity_days INT DEFAULT 0 COMMENT '有效期天数',
-    description VARCHAR(500) COMMENT '套餐说明',
+    description TEXT COMMENT '套餐说明',
     status VARCHAR(20) DEFAULT 'DRAFT' COMMENT '状态: DRAFT/PUBLISHED/PAUSED',
     sort_order INT DEFAULT 0 COMMENT '排序',
     sales_count INT DEFAULT 0 COMMENT '销量',
@@ -1399,7 +1399,7 @@ CREATE TABLE IF NOT EXISTS guide_service_logs (
     family_id BIGINT NOT NULL COMMENT '家庭ID',
     order_id BIGINT COMMENT '订单ID',
     service_content_id BIGINT NOT NULL COMMENT '服务内容ID',
-    notes VARCHAR(500) COMMENT '服务记录',
+    notes TEXT COMMENT '服务记录',
     duration INT COMMENT '服务时长(分钟)',
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务记录表';
@@ -1432,7 +1432,7 @@ CREATE TABLE IF NOT EXISTS finance_checkins (
     checkin_date DATE NOT NULL COMMENT '打卡日期',
     amount INT COMMENT '金额(分,收支记录)',
     category VARCHAR(50) COMMENT '收支分类',
-    note VARCHAR(200) COMMENT '备注',
+    note TEXT COMMENT '备注',
     mood VARCHAR(20) COMMENT '心情',
     earned_energy INT DEFAULT 0 COMMENT '获得的能量值',
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
@@ -1456,7 +1456,7 @@ CREATE TABLE IF NOT EXISTS insurance_policies (
     renewal_type VARCHAR(20) DEFAULT 'annual' COMMENT '续费类型: annual/monthly/single',
     status VARCHAR(20) DEFAULT 'active' COMMENT '状态: active/expired/cancelled',
     policy_no VARCHAR(100) COMMENT '保单号',
-    remark VARCHAR(500) COMMENT '备注',
+    remark TEXT COMMENT '备注',
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
     INDEX idx_user (user_id),
@@ -1484,7 +1484,7 @@ CREATE TABLE IF NOT EXISTS health_reports (
     gut_type VARCHAR(50) COMMENT '肠型',
     file_url VARCHAR(500) COMMENT '报告文件URL',
     status VARCHAR(20) DEFAULT 'active' COMMENT '状态: active/archived',
-    remark VARCHAR(500) COMMENT '备注',
+    remark TEXT COMMENT '备注',
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
     INDEX idx_user_id (user_id),
@@ -1543,7 +1543,7 @@ CREATE TABLE IF NOT EXISTS education_systems (
     id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
     name VARCHAR(32) NOT NULL UNIQUE COMMENT '编码(key)',
     label VARCHAR(50) NOT NULL COMMENT '显示名称',
-    description VARCHAR(200) COMMENT '描述说明',
+    description TEXT COMMENT '描述说明',
     sort_order INT DEFAULT 0 COMMENT '排序',
     status VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态: ACTIVE/DISABLED',
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
@@ -1614,7 +1614,7 @@ CREATE TABLE IF NOT EXISTS bazi_config (
 CREATE TABLE IF NOT EXISTS blood_type_config (
     id               BIGINT AUTO_INCREMENT PRIMARY KEY,
     blood_type       VARCHAR(5)   NOT NULL UNIQUE COMMENT '血型: A/B/AB/O',
-    description      VARCHAR(200) COMMENT '性格描述',
+    description      TEXT COMMENT '性格描述',
     mind_base        INT DEFAULT 0 COMMENT '心先天基础分(百分位)',
     wisdom_base      INT DEFAULT 0 COMMENT '智先天基础分(百分位)',
     body_modifier    INT DEFAULT 0 COMMENT '身修正系数(千分比)',
@@ -1659,7 +1659,7 @@ CREATE TABLE IF NOT EXISTS energy_rule (
     priority INT DEFAULT 0 COMMENT '优先级(数字越大越优先匹配)',
     conditions JSON COMMENT '触发条件(JSON表达式)',
     status TINYINT DEFAULT 1 COMMENT '状态: 1=启用 0=禁用',
-    description VARCHAR(500) COMMENT '规则描述',
+    description TEXT COMMENT '规则描述',
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
     INDEX idx_event_type (event_type),
@@ -1670,7 +1670,7 @@ CREATE TABLE IF NOT EXISTS energy_rule (
 CREATE TABLE IF NOT EXISTS activities (
     id               BIGINT AUTO_INCREMENT PRIMARY KEY,
     title            VARCHAR(100) NOT NULL COMMENT '活动标题',
-    description      VARCHAR(500) COMMENT '活动描述',
+    description      TEXT COMMENT '活动描述',
     cover_image      VARCHAR(500) COMMENT '封面图片URL',
     dimension_code   VARCHAR(20) COMMENT '维度代码: body/mind/wisdom/action/wealth',
     activity_type    VARCHAR(20) DEFAULT 'offline' COMMENT '活动类型: offline/online/campaign',
@@ -1696,7 +1696,7 @@ ALTER TABLE activities
     COMMENT '状态:draft(草稿)/pending(待审核)/rejected(已驳回)/published(发布中)/withdrawn(已撤回)',
   ADD COLUMN audit_status VARCHAR(20) DEFAULT NULL
     COMMENT '审核状态:approved/pending/rejected',
-  ADD COLUMN audit_reason VARCHAR(500) DEFAULT NULL
+  ADD COLUMN audit_reason TEXT DEFAULT NULL
     COMMENT '驳回原因',
   ADD COLUMN auditor_id BIGINT DEFAULT NULL
     COMMENT '审核人 ID',
@@ -1811,7 +1811,7 @@ CREATE TABLE IF NOT EXISTS growth_task (
     id BIGINT AUTO_INCREMENT PRIMARY KEY,
     type VARCHAR(16) NOT NULL COMMENT 'DAILY/NEWBIE',
     title VARCHAR(100) NOT NULL,
-    description VARCHAR(255),
+    description TEXT,
     reward_points INT DEFAULT 0,
     reward_energy INT DEFAULT 0,
     target_value INT DEFAULT 1,
@@ -1906,7 +1906,7 @@ CREATE TABLE IF NOT EXISTS referral_leaderboard (
 CREATE TABLE IF NOT EXISTS `distribution_systems` (
     `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
     `name` VARCHAR(100) NOT NULL COMMENT '团队名称',
-    `description` VARCHAR(500) COMMENT '团队描述',
+    `description` TEXT COMMENT '团队描述',
     `owner_id` BIGINT COMMENT '创建人(服务商用户ID)',
     `profit_rate` INT DEFAULT 0 COMMENT '利润分成比例(bps, 如2000=20%)',
     `enabled` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
@@ -1946,8 +1946,8 @@ CREATE TABLE IF NOT EXISTS zodiac_pairing (
     zodiac_code_2    VARCHAR(20) NOT NULL COMMENT '生肖代码2',
     pairing_type     VARCHAR(20) NOT NULL COMMENT '配对类型: liuhe/sanhe/banhe/liuchong/xianghai/xiangxing/ping',
     compatibility_score INT DEFAULT 50 COMMENT '兼容分 0-100',
-    description      VARCHAR(500) COMMENT '配对解读',
-    advice           VARCHAR(500) COMMENT '相处建议',
+    description      TEXT COMMENT '配对解读',
+    advice           TEXT COMMENT '相处建议',
     created_at       DATETIME DEFAULT CURRENT_TIMESTAMP,
     UNIQUE KEY uk_zodiac_pair (zodiac_code_1, zodiac_code_2)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生肖配对规则表';
@@ -2014,8 +2014,8 @@ CREATE TABLE IF NOT EXISTS blood_type_pairing (
     blood_type_1     VARCHAR(5) NOT NULL COMMENT '血型1',
     blood_type_2     VARCHAR(5) NOT NULL COMMENT '血型2',
     compatibility_score INT DEFAULT 50 COMMENT '兼容分 0-100',
-    description      VARCHAR(500) COMMENT '配对描述',
-    advice           VARCHAR(500) COMMENT '相处建议',
+    description      TEXT COMMENT '配对描述',
+    advice           TEXT COMMENT '相处建议',
     created_at       DATETIME DEFAULT CURRENT_TIMESTAMP,
     UNIQUE KEY uk_blood_pair (blood_type_1, blood_type_2)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='血型配对表';
@@ -2037,8 +2037,8 @@ CREATE TABLE IF NOT EXISTS life_number_relationship (
     id               BIGINT AUTO_INCREMENT PRIMARY KEY,
     relationship_number INT NOT NULL COMMENT '关系数字 1-9',
     title            VARCHAR(100) COMMENT '关系主题',
-    description      VARCHAR(500) COMMENT '关系解读',
-    advice           VARCHAR(500) COMMENT '相处建议',
+    description      TEXT COMMENT '关系解读',
+    advice           TEXT COMMENT '相处建议',
     color_hex        VARCHAR(10) COMMENT '代表色',
     created_at       DATETIME DEFAULT CURRENT_TIMESTAMP,
     UNIQUE KEY uk_relationship_num (relationship_number)
@@ -2079,7 +2079,7 @@ CREATE TABLE IF NOT EXISTS indicator_values (
     definition_id BIGINT NOT NULL COMMENT 'FK→indicator_definitions.id',
     value VARCHAR(200) COMMENT '值',
     numeric_value DECIMAL(10,2) COMMENT '数值(number类型时用)',
-    remark VARCHAR(500) COMMENT '备注',
+    remark TEXT COMMENT '备注',
     recorded_at DATETIME DEFAULT CURRENT_TIMESTAMP,
     INDEX idx_source (source_type, source_id),
     INDEX idx_definition (definition_id)
@@ -2091,7 +2091,7 @@ CREATE TABLE IF NOT EXISTS tongue_records (
     member_id BIGINT NOT NULL COMMENT '家庭成员ID',
     child_id BIGINT COMMENT '孩子ID',
     image_url VARCHAR(500) COMMENT '舌象图片URL',
-    overall_assessment VARCHAR(500) COMMENT '总体评估',
+    overall_assessment TEXT COMMENT '总体评估',
     status VARCHAR(20) DEFAULT 'draft' COMMENT 'draft/confirmed',
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
     updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
@@ -2125,8 +2125,8 @@ ALTER TABLE activities ADD COLUMN energy_penalty_unregistered INT DEFAULT 5 COMM
 CREATE TABLE IF NOT EXISTS system_config (
     id BIGINT AUTO_INCREMENT PRIMARY KEY,
     config_key VARCHAR(100) NOT NULL UNIQUE COMMENT '配置键',
-    config_value VARCHAR(500) COMMENT '配置值',
-    description VARCHAR(255) COMMENT '说明',
+    config_value TEXT COMMENT '配置值',
+    description TEXT COMMENT '说明',
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
     updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';
@@ -2216,7 +2216,7 @@ CREATE TABLE IF NOT EXISTS supply_system (
     admin_id BIGINT NOT NULL COMMENT '管理员用户ID',
     settlement_period_days INT NOT NULL DEFAULT 30 COMMENT '账期(天)',
     platform_profit_rate DECIMAL(5,2) NOT NULL DEFAULT 0 COMMENT '平台留利比例(%)',
-    description VARCHAR(500) COMMENT '描述',
+    description TEXT COMMENT '描述',
     status VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态: active/disabled',
     created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
     updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
@@ -2244,7 +2244,7 @@ CREATE TABLE IF NOT EXISTS supply_settlement (
     supplier_payout INT NOT NULL DEFAULT 0 COMMENT '供应商实付(分)',
     status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '状态: pending/settled',
     settled_at DATETIME COMMENT '结算时间',
-    remark VARCHAR(500) COMMENT '备注',
+    remark TEXT COMMENT '备注',
     created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
     KEY idx_system_id (system_id),
     KEY idx_period (period_start, period_end)