fix: switch to xserver database with UTF-8 data

- Change default database from x_server_mobile to xserver
- Add 007_xserver_init.sql initialization script
- Companies data now correctly encoded in UTF-8:
  - 合塑 (hesu)
  - 新友合 (xinyouhe)
  - 派卡 (paika)
  - 斯玛特 (simate)
  - magic bridge Auto (mbaf)
- Company Feishu apps properly configured

The key fix is to execute SQL directly inside the MySQL container
using heredoc to avoid charset conversion issues during transfer.

Usage:
docker exec 1Panel-mysql-409s mysql -uroot -p'mysql_xEsdPa' --default-character-set=utf8mb4 xserver < 007_xserver_init.sql

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
root
2026-02-24 18:56:52 +08:00
parent 5d989dfd86
commit be9ae8a0d9
3 changed files with 128 additions and 1 deletions
+1 -1
View File
@@ -7,7 +7,7 @@ return [
'driver' => 'mysql',
'host' => getenv('DB_HOST') ?: 'mysql',
'port' => getenv('DB_PORT') ?: 3306,
'database' => getenv('DB_DATABASE') ?: 'x_server_mobile',
'database' => getenv('DB_DATABASE') ?: 'xserver',
'username' => getenv('DB_USERNAME') ?: 'root',
'password' => getenv('DB_PASSWORD') ?: '123456',
'unix_socket' => getenv('DB_SOCKET') ?: '',
@@ -0,0 +1,111 @@
-- XServer 数据库初始化脚本
-- 使用 UTF-8 编码保存此文件
-- 执行方式:在 MySQL 容器内执行,确保使用正确的字符集
-- 重要:必须在容器内部直接执行,避免字符集转换问题
-- docker exec 1Panel-mysql-409s mysql -uroot -p'mysql_xEsdPa' --default-character-set=utf8mb4 xserver < 007_xserver_init.sql
SET NAMES utf8mb4;
SET CHARACTER SET utf8mb4;
USE xserver;
-- =====================================
-- 1. 公司表(companies)
-- =====================================
DROP TABLE IF EXISTS companies;
CREATE TABLE `companies` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '公司ID',
`name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '公司名称',
`abbr` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '公司缩写',
`tenant_key` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '飞书企业标识',
`sort` int(11) NOT NULL DEFAULT 0 COMMENT '排序',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '状态:1=启用,0=禁用',
`feishu_enabled` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否启用飞书',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='公司表';
-- 插入公司数据
INSERT INTO companies (name, abbr, tenant_key, status, sort, feishu_enabled) VALUES
("合塑", "hesu", "10edab4d5d85175f", 1, 1, 1),
("新友合", "xinyouhe", "14e7bc0fe5985740", 1, 2, 1),
("派卡", "paika", "14e5377859d71740", 1, 3, 1),
("斯玛特", "simate", "", 0, 4, 0),
("magic bridge Auto", "mbaf", "", 1, 5, 0);
-- =====================================
-- 2. 用户表(users)
-- =====================================
DROP TABLE IF EXISTS users;
CREATE TABLE `users` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`sn` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户编号',
`company_id` bigint unsigned NOT NULL COMMENT '所属公司ID',
`report_to` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '上级用户ID',
`name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名',
`avatar` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '头像URL',
`sex` tinyint(2) NULL DEFAULT NULL COMMENT '性别:1=男,2=女',
`email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮箱',
`phone` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手机号',
`password` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '密码',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '状态:1=正常,0=禁用',
`user_type` tinyint(2) NOT NULL DEFAULT 1 COMMENT '用户类型:1=内部,2=外部',
`union_id` varchar(60) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '飞书UnionID',
`feishu_user_id` varchar(60) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '飞书用户ID',
`feishu_open_id` varchar(60) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '飞书OpenID',
`tenant_key` varchar(60) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前企业标识',
`position` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '职位',
`sign_img` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '签名图片',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_company_id` (`company_id`),
KEY `idx_feishu_user_id` (`feishu_user_id`),
KEY `idx_feishu_union_id` (`union_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
-- =====================================
-- 3. 飞书应用配置表(company_feishu_apps)
-- =====================================
DROP TABLE IF EXISTS company_feishu_apps;
CREATE TABLE `company_feishu_apps` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
`company_id` int(11) NOT NULL COMMENT '公司ID',
`system_id` int(11) NOT NULL DEFAULT 1 COMMENT '系统ID:1=X-Server',
`name` varchar(90) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '应用名称',
`app_id` varchar(60) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '飞书应用ID',
`app_secret` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '飞书应用密钥',
`encrypt_key` varchar(60) COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '事件加密密钥',
`verification_token` varchar(60) COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '事件验证令牌',
`callback_url` varchar(255) COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'PC端回调地址',
`mobile_callback_url` varchar(255) COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '移动端回调地址',
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态:1=启用,0=禁用',
`created_at` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
`updated_at` int(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_company_id` (`company_id`) USING BTREE,
KEY `idx_system_id` (`system_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='公司飞书应用配置表';
-- 插入飞书应用配置
INSERT INTO company_feishu_apps (company_id, system_id, name, app_id, app_secret, callback_url, mobile_callback_url, status, created_at, updated_at) VALUES
(2, 1, "X-Server", "cli_a73e1e6406fa501c", "9cMfxujjGG9JPmNfNcOwUdCoIXqaM1wY", "https://x.hnxinyouhe.com/auth/feishu-callback", "https://mweb-fdesk.hnxinyouhe.com/login/feishu-callback", 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
(3, 1, "X-Server", "cli_a73e8253144f500b", "MpLqRmfWx8iA8vwWj5IO6elvIKAHU8E6", "https://x.hnxinyouhe.com/auth/feishu-callback", "https://mweb-fdesk.hnxinyouhe.com/login/feishu-callback", 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
(1, 1, "X-Server", "cli_a6183b882cb8500d", "VqYib48u4EtDIa6nG9qH3f0fYCA1bCvs", "https://x.hnxinyouhe.com/auth/feishu-callback", "https://mweb-fdesk.hnxinyouhe.com/login/feishu-callback", 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
-- =====================================
-- 验证结果
-- =====================================
SELECT "=== companies 表数据 ===" as "";
SELECT id, name, abbr, tenant_key FROM companies ORDER BY id;
SELECT "=== company_feishu_apps 表数据 ===" as "";
SELECT id, company_id, name, app_id FROM company_feishu_apps ORDER BY id;
SELECT "=== 统计信息 ===" as "";
SELECT COUNT(*) as company_count FROM companies;
SELECT COUNT(*) as feishu_app_count FROM company_feishu_apps;
+16
View File
@@ -0,0 +1,16 @@
# MySQL UTF-8 字符集配置
# 放到 /etc/mysql/conf.d/ 或 /etc/my.cnf.d/ 目录下
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
# 确保客户端连接使用正确字符集
skip-character-set-client-handshake = 0