# 修复 nick_name 字段错误 ## 问题描述 微信登录时出现错误: ``` Field 'nick_name' doesn't have a default value ``` ## 问题原因 1. **数据库表结构**:`sys_user` 表中的 `nick_name` 字段定义为 `NOT NULL` 且无默认值 2. **代码问题**:微信登录代码在创建新用户时未设置 `nick_name` 字段值 ## 解决方案 ### ✅ 方案1:代码修复(已实施) 在 `SysLoginController.java` 的 `weixinLogin` 方法中,创建新用户时添加了 `nick_name` 字段的设置: ```java user.setNickName(phoneNumber); // 使用手机号作为默认昵称 ``` **修改位置**: - 文件:`ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java` - 行号:约 203 行 ### 方案2:数据库表结构修改(可选) 如果需要更灵活的方案,可以修改数据库表结构,允许 `nick_name` 为 NULL: ```sql ALTER TABLE sys_user MODIFY COLUMN nick_name VARCHAR(30) DEFAULT NULL COMMENT '用户昵称'; ``` 执行脚本:`sql/fix_nick_name_default.sql` ## 数据库表检查结果 ### ✅ 所有核心表都已正常创建 - ✓ sys_user - ✓ sys_role - ✓ sys_menu - ✓ sys_dept - ✓ sys_post - ✓ sys_config - ✓ sys_dict_type - ✓ sys_dict_data - ✓ sys_notice - ✓ sys_oper_log - ✓ sys_logininfor ### sys_user 表结构 **必填但无默认值的字段**: - `user_name` (varchar(30)) - 用户账号 - `nick_name` (varchar(30)) - 用户昵称 **已添加的字段**: - ✓ `openid` (varchar(100)) - 微信openid ## 修复步骤 1. ✅ **代码修复**:已在创建用户时设置 `nick_name` 2. ✅ **数据库字段**:`openid` 字段已添加 3. ⚠️ **建议**:重启后端服务以应用代码更改 ## 测试 修复后,请重新测试微信登录功能: 1. 在小程序中重新尝试登录 2. 应该不再出现 `Field 'nick_name' doesn't have a default value` 错误 3. 新用户创建时,`nick_name` 会自动设置为手机号 ## 相关文件 - `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java` - 微信登录控制器 - `sql/check_tables.py` - 数据库表检查脚本 - `sql/fix_nick_name_default.sql` - 数据库表结构修复脚本(可选) - `sql/fix_openid_field.py` - openid 字段添加脚本(已执行) ## 注意事项 - 如果后端服务正在运行,需要重启服务以应用代码更改 - 新用户创建时,`nick_name` 会使用手机号作为默认值 - 如果需要更灵活的昵称设置,可以考虑从微信用户信息中获取昵称