From 43e39ab08b40a2fff3842e105ec7e968ea6dbf44 Mon Sep 17 00:00:00 2001 From: Saksham Gupta Date: Thu, 15 Apr 2021 15:02:10 +0530 Subject: [PATCH] Fix #16777 - Non-UTF8 Primary Key fix Signed-off-by: Saksham Gupta --- libraries/classes/Util.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/classes/Util.php b/libraries/classes/Util.php index 97accdaa59..3f6c40825e 100644 --- a/libraries/classes/Util.php +++ b/libraries/classes/Util.php @@ -957,6 +957,9 @@ class Util } $conditionValue = ''; + $isBinaryString = $meta->type === 'string' && stripos($fieldFlags, 'BINARY') !== false; + // 63 is the binary charset, see: https://dev.mysql.com/doc/internals/en/charsets.html + $isBlobAndIsBinaryCharset = $meta->type === 'blob' && $meta->charsetnr === 63; // timestamp is numeric on some MySQL 4.1 // for real we use CONCAT above and it should compare to string if ($meta->numeric @@ -964,10 +967,7 @@ class Util && ($meta->type !== 'real') ) { $conditionValue = '= ' . $row; - } elseif (($meta->type === 'blob') || ($meta->type === 'string') - && stripos($fieldFlags, 'BINARY') !== false - && ! empty($row) - ) { + } elseif ($isBlobAndIsBinaryCharset || (! empty($row) && $isBinaryString)) { // hexify only if this is a true not empty BLOB or a BINARY // do not waste memory building a too big condition