From e5b8db41ea05d54496e06925fd086000ce27e0f0 Mon Sep 17 00:00:00 2001 From: richjohnrambo Date: Mon, 7 Sep 2026 18:47:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=85=BC=E5=AE=B9=E7=A7=9F=E6=88=B7?= =?UTF-8?q?=E6=A0=87=E5=87=86MySQL=E8=BF=9E=E6=8E=A5=E4=B8=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/internal/library/imtenant/db.go | 5 ++++- server/internal/library/imtenant/db_test.go | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/server/internal/library/imtenant/db.go b/server/internal/library/imtenant/db.go index 374d1f5..8d85d39 100644 --- a/server/internal/library/imtenant/db.go +++ b/server/internal/library/imtenant/db.go @@ -148,7 +148,10 @@ func replaceMySQLDatabase(link string, dbName string) (string, error) { func normalizeMySQLTimeOptions(link string) (string, error) { if !strings.HasPrefix(link, "mysql:") { - return "", gerror.New("租户业务库仅支持 MySQL") + if !strings.Contains(link, "@tcp(") { + return "", gerror.New("租户业务库仅支持 MySQL") + } + link = "mysql:" + link } parts := strings.SplitN(link, "?", 2) values := make(url.Values) diff --git a/server/internal/library/imtenant/db_test.go b/server/internal/library/imtenant/db_test.go index 727c173..cbabad0 100644 --- a/server/internal/library/imtenant/db_test.go +++ b/server/internal/library/imtenant/db_test.go @@ -6,6 +6,25 @@ import ( "testing" ) +func TestNormalizeMySQLTimeOptions(t *testing.T) { + link, err := normalizeMySQLTimeOptions("user:pass@tcp(127.0.0.1:3306)/tinode?charset=utf8mb4") + if err != nil { + t.Fatalf("normalize raw mysql dsn: %v", err) + } + if !strings.HasPrefix(link, "mysql:user:pass@tcp(127.0.0.1:3306)/tinode?") { + t.Fatalf("unexpected normalized link: %s", link) + } + if !strings.Contains(link, "loc=UTC") || !strings.Contains(link, "parseTime=true") { + t.Fatalf("missing required time options: %s", link) + } +} + +func TestNormalizeMySQLTimeOptionsRejectsUnsupportedFormat(t *testing.T) { + if _, err := normalizeMySQLTimeOptions("postgres://user:pass@127.0.0.1:5432/tinode"); err == nil { + t.Fatal("expected unsupported format error") + } +} + func TestReplaceMySQLDatabaseUsesUTC(t *testing.T) { link, err := replaceMySQLDatabase("mysql:user:pass@tcp(127.0.0.1:3306)/hotgo?loc=Local&parseTime=false&charset=utf8mb4", "tinode") if err != nil {