From d8bcf38a78ba0035e442de3ee45bb0561da718f8 Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 7 Oct 2024 05:26:51 +0000 Subject: [PATCH] Fixed for the string truncation for "latin1" charset --- src/Database/Definition/DbaDefinition.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Database/Definition/DbaDefinition.php b/src/Database/Definition/DbaDefinition.php index 04b2aaacf4..378ba86867 100644 --- a/src/Database/Definition/DbaDefinition.php +++ b/src/Database/Definition/DbaDefinition.php @@ -8,7 +8,9 @@ namespace Friendica\Database\Definition; use Exception; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Hook; +use Friendica\DI; /** * Stores the whole database definition @@ -65,12 +67,18 @@ class DbaDefinition $fields = []; + $charset = DI::config()->get('database', 'charset') ?? ''; + // Assign all field that are present in the table foreach ($fieldNames as $field) { if (isset($data[$field])) { // Limit the length of varchar, varbinary, char and binary fields if (is_string($data[$field]) && preg_match("/char\((\d*)\)/", $definition[$table]['fields'][$field]['type'], $result)) { - $data[$field] = mb_substr($data[$field], 0, $result[1]); + if ($charset == 'latin1') { + $data[$field] = substr($data[$field], 0, $result[1]); + } else { + $data[$field] = mb_substr($data[$field], 0, $result[1]); + } } elseif (is_string($data[$field]) && preg_match("/binary\((\d*)\)/", $definition[$table]['fields'][$field]['type'], $result)) { $data[$field] = substr($data[$field], 0, $result[1]); } elseif (is_numeric($data[$field]) && $definition[$table]['fields'][$field]['type'] === 'int') {