diff --git a/packages/nocodb/src/db/BaseModelSqlv2.ts b/packages/nocodb/src/db/BaseModelSqlv2.ts index efbdc09f4b..f39079c2fd 100644 --- a/packages/nocodb/src/db/BaseModelSqlv2.ts +++ b/packages/nocodb/src/db/BaseModelSqlv2.ts @@ -3966,7 +3966,25 @@ function _wherePk(primaryKeys: Column[], id) { const ids = (id + '').split('___'); const where = {}; for (let i = 0; i < primaryKeys.length; ++i) { - where[primaryKeys[i].column_name] = ids[i]; + //Cast the id to string. + const idAsString = ids[i] + ''; + // Check if the id is a UUID and the column is binary(16) + const isUUIDBinary16 = + primaryKeys[i].ct === 'binary(16)' && + (idAsString.length === 36 || idAsString.length === 32); + // If the id is a UUID and the column is binary(16), convert the id to a Buffer. Otherwise, return null to indicate that the id is not a UUID. + const idAsUUID = isUUIDBinary16 + ? idAsString.length === 32 + ? idAsString.replace( + /(.{8})(.{4})(.{4})(.{4})(.{12})/, + '$1-$2-$3-$4-$5', + ) + : idAsString + : null; + + where[primaryKeys[i].column_name] = idAsUUID + ? Buffer.from(idAsUUID.replace(/-/g, ''), 'hex') + : ids[i]; } return where; } diff --git a/packages/nocodb/src/db/conditionV2.ts b/packages/nocodb/src/db/conditionV2.ts index 4234c91a08..e1ec246e7c 100644 --- a/packages/nocodb/src/db/conditionV2.ts +++ b/packages/nocodb/src/db/conditionV2.ts @@ -419,6 +419,8 @@ const parseConditionV2 = async ( ].includes(column.uidt) ) { qb = qb.where(field, val); + } else if (column.ct === 'timestamp') { + qb = qb.whereRaw('DATE(??) = DATE(?)', [field, val]); } else { // mysql is case-insensitive for strings, turn to case-sensitive qb = qb.whereRaw('BINARY ?? = ?', [field, val]);