From 3d56851172aee09fd03881d427e130eaf0285ee6 Mon Sep 17 00:00:00 2001 From: liugang Date: Thu, 20 Nov 2025 15:56:46 +0800 Subject: [PATCH] * [refac] Improve charset encoding validation in dbh constructor. --- lib/dbh/dbh.class.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/dbh/dbh.class.php b/lib/dbh/dbh.class.php index b3bf1fc1e1..90a37695e8 100644 --- a/lib/dbh/dbh.class.php +++ b/lib/dbh/dbh.class.php @@ -136,9 +136,11 @@ class dbh /* Mysql driver include mysql and oceanbase. */ if($driver == 'mysql') { - $collation = $dbConfig->collation ?? 'utf8mb4_general_ci'; - $queries[] = "SET NAMES {$dbConfig->encoding}"; - $queries[] = "SET COLLATION_CONNECTION = '{$collation}'"; + $encoding = strtolower($dbConfig->encoding ?? 'utf8mb4'); + $collation = strtolower($dbConfig->collation ?? 'utf8mb4_general_ci'); + if($encoding !== 'utf8mb4') $encoding = 'utf8mb4'; + if(strpos($collation, $encoding) !== 0) $collation = 'utf8mb4_general_ci'; + $queries[] = "SET NAMES {$encoding} COLLATE '{$collation}'"; if(isset($dbConfig->strictMode) && empty($dbConfig->strictMode)) $queries[] = "SET @@sql_mode= ''"; } else