From 080197eaa2b0d18948724e06bb99ea6c0a16b89f Mon Sep 17 00:00:00 2001 From: Yur1Ca Date: Sun, 26 Oct 2025 03:48:14 +0800 Subject: [PATCH] Asynchronous SET NAMES utf8mb4 --- game/addons/sourcemod/scripting/sbpp_comms.sp | 12 +++++++++--- game/addons/sourcemod/scripting/sbpp_main.sp | 11 +++++++++-- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/game/addons/sourcemod/scripting/sbpp_comms.sp b/game/addons/sourcemod/scripting/sbpp_comms.sp index d12d49aed..d347a8863 100644 --- a/game/addons/sourcemod/scripting/sbpp_comms.sp +++ b/game/addons/sourcemod/scripting/sbpp_comms.sp @@ -1380,9 +1380,15 @@ public void GotDatabase(Database db, const char[] error, any data) } // Set character set to UTF8MB4 in the database - char query[128]; - Format(query, sizeof(query), "SET NAMES utf8mb4"); - db.Query(Query_ErrorCheck, query); + // Use SQL_SetCharset to ensure charset is set synchronously before any operations + if (!db.SetCharset("utf8mb4")) + { + LogError("Failed to set database charset to utf8mb4"); + // Fallback to async method + char query[128]; + Format(query, sizeof(query), "SET NAMES utf8mb4"); + db.Query(Query_ErrorCheck, query); + } // Process queue SQLiteDB.Query(Query_ProcessQueue, diff --git a/game/addons/sourcemod/scripting/sbpp_main.sp b/game/addons/sourcemod/scripting/sbpp_main.sp index 74286a8c4..d6480194b 100644 --- a/game/addons/sourcemod/scripting/sbpp_main.sp +++ b/game/addons/sourcemod/scripting/sbpp_main.sp @@ -1090,8 +1090,15 @@ public void GotDatabase(Database db, const char[] error, any data) char query[1024]; - Format(query, sizeof(query), "SET NAMES utf8mb4"); - DB.Query(ErrorCheckCallback, query); + // Set character set to UTF8MB4 in the database + // Use SetCharset to ensure charset is set synchronously before any operations + if (!DB.SetCharset("utf8mb4")) + { + LogToFile(logFile, "Failed to set database charset to utf8mb4, trying async method"); + // Fallback to async method + Format(query, sizeof(query), "SET NAMES utf8mb4"); + DB.Query(ErrorCheckCallback, query); + } InsertServerInfo();