diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/SchemaServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/SchemaServiceIntegrationTest.java
index be1f6b5dae37db17ec5e90ad001a54ff77869886..540e17850a535b8776daf4a6a7bf53a5499f1838 100644
--- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/SchemaServiceIntegrationTest.java
+++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/SchemaServiceIntegrationTest.java
@@ -332,12 +332,39 @@ public class SchemaServiceIntegrationTest extends AbstractUnitTest {
         assertEquals("other_id", pk1.getColumn().getName());
         assertEquals("other_id", pk1.getColumn().getInternalName());
         assertEquals(ColumnTypeDto.BIGINT, pk1.getColumn().getColumnType());
+    }
+
+    @Test
+    public void inspectTable_exoticBoolean_succeeds() throws TableNotFoundException, SQLException {
 
+        /* test */
+        final TableDto response = schemaService.inspectTable(DATABASE_1_PRIVILEGED_DTO, "exotic_boolean");
+        final ConstraintsDto constraints = response.getConstraints();
+        final List<PrimaryKeyDto> primaryKey = new LinkedList<>(constraints.getPrimaryKey());
+        assertEquals(1, primaryKey.size());
+        final PrimaryKeyDto pk0 = primaryKey.get(0);
+        assertNull(pk0.getId());
+        assertNotNull(pk0.getTable());
+        assertNull(pk0.getTable().getId());
+        assertEquals("exotic_boolean", pk0.getTable().getName());
+        assertEquals("exotic_boolean", pk0.getTable().getInternalName());
+        assertNotNull(pk0.getColumn());
+        assertNull(pk0.getColumn().getId());
+        assertNull(pk0.getColumn().getTableId());
+        assertEquals(DATABASE_1_ID, pk0.getColumn().getDatabaseId());
+        assertNull(pk0.getColumn().getAlias());
+        assertEquals("bool_default", pk0.getColumn().getName());
+        assertEquals("bool_default", pk0.getColumn().getInternalName());
+        assertEquals(ColumnTypeDto.BOOL, pk0.getColumn().getColumnType());
+        final List<ColumnDto> columns = response.getColumns();
+        assertEquals(3, columns.size());
+        assertColumn(columns.get(0), null, null, DATABASE_1_ID, "bool_default", "bool_default", ColumnTypeDto.BOOL, null, 0L, false, null, null);
+        assertColumn(columns.get(1), null, null, DATABASE_1_ID, "bool_tinyint", "bool_tinyint", ColumnTypeDto.BOOL, null, 0L, false, null, null);
+        assertColumn(columns.get(2), null, null, DATABASE_1_ID, "bool_tinyint_unsigned", "bool_tinyint_unsigned", ColumnTypeDto.BOOL, null, 0L, false, null, null);
     }
 
     @Test
-    public void inspectView_succeeds() throws ViewMalformedException, SQLException, ViewNotFoundException,
-            ViewSchemaException {
+    public void inspectView_succeeds() throws SQLException, ViewNotFoundException {
 
         /* test */
         final ViewDto response = schemaService.inspectView(DATABASE_1_PRIVILEGED_DTO, "not_in_metadata_db2");
diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java
index 41fa4963fb26158f11060db383c4cb973e66e1c0..b8267e959e32f00545ec6670af98b420efb17c13 100644
--- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java
+++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java
@@ -334,7 +334,7 @@ public class TableServiceIntegrationTest extends AbstractUnitTest {
 
         /* test */
         final List<TableDto> response = tableService.getSchemas(DATABASE_1_PRIVILEGED_DTO);
-        assertEquals(3, response.size());
+        assertEquals(4, response.size());
         final TableDto table0 = response.get(0);
         Assertions.assertEquals("complex_foreign_keys", table0.getInternalName());
         Assertions.assertEquals("complex_foreign_keys", table0.getName());
@@ -411,32 +411,53 @@ public class TableServiceIntegrationTest extends AbstractUnitTest {
         assertEquals(0, constraints1.getUniques().size());
         /* table 2 */
         final TableDto table2 = response.get(2);
-        Assertions.assertEquals("not_in_metadata_db", table2.getInternalName());
-        Assertions.assertEquals("not_in_metadata_db", table2.getName());
+        Assertions.assertEquals("exotic_boolean", table2.getInternalName());
+        Assertions.assertEquals("exotic_boolean", table2.getName());
         Assertions.assertEquals(DATABASE_1_ID, table2.getTdbid());
         assertTrue(table2.getIsVersioned());
         Assertions.assertEquals(DATABASE_1_PUBLIC, table2.getIsPublic());
         final List<ColumnDto> columns2 = table2.getColumns();
         assertNotNull(columns2);
-        Assertions.assertEquals(5, columns2.size());
-        assertColumn(columns2.get(0), null, null, DATABASE_1_ID, "id", "id", ColumnTypeDto.BIGINT, 19L, 0L, false, null, null);
-        assertColumn(columns2.get(1), null, null, DATABASE_1_ID, "given_name", "given_name", ColumnTypeDto.VARCHAR, 255L, null, false, null, null);
-        assertColumn(columns2.get(2), null, null, DATABASE_1_ID, "middle_name", "middle_name", ColumnTypeDto.VARCHAR, 255L, null, true, null, null);
-        assertColumn(columns2.get(3), null, null, DATABASE_1_ID, "family_name", "family_name", ColumnTypeDto.VARCHAR, 255L, null, false, null, null);
-        assertColumn(columns2.get(4), null, null, DATABASE_1_ID, "age", "age", ColumnTypeDto.INT, 10L, 0L, false, null, null);
+        Assertions.assertEquals(3, columns2.size());
+        assertColumn(columns2.get(0), null, null, DATABASE_1_ID, "bool_default", "bool_default", ColumnTypeDto.BOOL, null, 0L, false, null, null);
+        assertColumn(columns2.get(1), null, null, DATABASE_1_ID, "bool_tinyint", "bool_tinyint", ColumnTypeDto.BOOL, null, 0L, false, null, null);
+        assertColumn(columns2.get(2), null, null, DATABASE_1_ID, "bool_tinyint_unsigned", "bool_tinyint_unsigned", ColumnTypeDto.BOOL, null, 0L, false, null, null);
         final ConstraintsDto constraints2 = table2.getConstraints();
         assertNotNull(constraints2);
         final Set<PrimaryKeyDto> primaryKey2 = constraints2.getPrimaryKey();
         Assertions.assertEquals(1, primaryKey2.size());
         final Set<String> checks2 = constraints2.getChecks();
-        Assertions.assertEquals(1, checks2.size());
-        Assertions.assertEquals(Set.of("`age` > 0 and `age` < 120"), checks2);
+        Assertions.assertEquals(0, checks2.size());
         final List<UniqueDto> uniques2 = constraints2.getUniques();
-        Assertions.assertEquals(1, uniques2.size());
-        Assertions.assertEquals(2, uniques2.get(0).getColumns().size());
-        Assertions.assertEquals("not_in_metadata_db", uniques2.get(0).getTable().getInternalName());
-        Assertions.assertEquals("given_name", uniques2.get(0).getColumns().get(0).getInternalName());
-        Assertions.assertEquals("family_name", uniques2.get(0).getColumns().get(1).getInternalName());
+        Assertions.assertEquals(0, uniques2.size());
+        /* table 3 */
+        final TableDto table3 = response.get(3);
+        Assertions.assertEquals("not_in_metadata_db", table3.getInternalName());
+        Assertions.assertEquals("not_in_metadata_db", table3.getName());
+        Assertions.assertEquals(DATABASE_1_ID, table3.getTdbid());
+        assertTrue(table3.getIsVersioned());
+        Assertions.assertEquals(DATABASE_1_PUBLIC, table3.getIsPublic());
+        final List<ColumnDto> columns3 = table3.getColumns();
+        assertNotNull(columns3);
+        Assertions.assertEquals(5, columns3.size());
+        assertColumn(columns3.get(0), null, null, DATABASE_1_ID, "id", "id", ColumnTypeDto.BIGINT, 19L, 0L, false, null, null);
+        assertColumn(columns3.get(1), null, null, DATABASE_1_ID, "given_name", "given_name", ColumnTypeDto.VARCHAR, 255L, null, false, null, null);
+        assertColumn(columns3.get(2), null, null, DATABASE_1_ID, "middle_name", "middle_name", ColumnTypeDto.VARCHAR, 255L, null, true, null, null);
+        assertColumn(columns3.get(3), null, null, DATABASE_1_ID, "family_name", "family_name", ColumnTypeDto.VARCHAR, 255L, null, false, null, null);
+        assertColumn(columns3.get(4), null, null, DATABASE_1_ID, "age", "age", ColumnTypeDto.INT, 10L, 0L, false, null, null);
+        final ConstraintsDto constraints3 = table3.getConstraints();
+        assertNotNull(constraints3);
+        final Set<PrimaryKeyDto> primaryKey3 = constraints3.getPrimaryKey();
+        Assertions.assertEquals(1, primaryKey3.size());
+        final Set<String> checks3 = constraints3.getChecks();
+        Assertions.assertEquals(1, checks3.size());
+        Assertions.assertEquals(Set.of("`age` > 0 and `age` < 120"), checks3);
+        final List<UniqueDto> uniques3 = constraints3.getUniques();
+        Assertions.assertEquals(1, uniques3.size());
+        Assertions.assertEquals(2, uniques3.get(0).getColumns().size());
+        Assertions.assertEquals("not_in_metadata_db", uniques3.get(0).getTable().getInternalName());
+        Assertions.assertEquals("given_name", uniques3.get(0).getColumns().get(0).getInternalName());
+        Assertions.assertEquals("family_name", uniques3.get(0).getColumns().get(1).getInternalName());
     }
 
     @Test
diff --git a/dbrepo-data-service/rest-service/src/test/resources/init/weather.sql b/dbrepo-data-service/rest-service/src/test/resources/init/weather.sql
index 79755c97bf68fd822869277e3ad867c582f4e68c..7c3ca99ce39f61755752d2ecbb607ad6ed86e386 100644
--- a/dbrepo-data-service/rest-service/src/test/resources/init/weather.sql
+++ b/dbrepo-data-service/rest-service/src/test/resources/init/weather.sql
@@ -32,7 +32,7 @@ CREATE TABLE complex_foreign_keys
 (
     id         BIGINT NOT NULL PRIMARY KEY,
     weather_id BIGINT NOT NULL,
-    other_id   BIGINT   NOT NULL,
+    other_id   BIGINT NOT NULL,
     FOREIGN KEY (weather_id, other_id) REFERENCES complex_primary_key (id, `other_id`)
 ) WITH SYSTEM VERSIONING;
 
@@ -42,6 +42,13 @@ CREATE TABLE sensor
     `value`     DECIMAL
 ) WITH SYSTEM VERSIONING;
 
+CREATE TABLE exotic_boolean
+(
+    `bool_default`          BOOLEAN             NOT NULL PRIMARY KEY,
+    `bool_tinyint`          TINYINT(1)          NOT NULL,
+    `bool_tinyint_unsigned` TINYINT(1) UNSIGNED NOT NULL
+) WITH SYSTEM VERSIONING;
+
 INSERT INTO weather_location (location, lat, lng)
 VALUES ('Albury', -36.0653583, 146.9112214),
        ('Sydney', -33.847927, 150.6517942),
diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/DataMapper.java b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/DataMapper.java
index 796ef3edebc452471569dd6f04c81bb4731891cd..07394c765864671e1d286c242e3902be66a16767 100644
--- a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/DataMapper.java
+++ b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/DataMapper.java
@@ -97,7 +97,8 @@ public interface DataMapper {
 
     /**
      * Map the inspected schema to either an existing view/table and append e.g. column or (if not existing) create a new view/table.
-     * @param database The database.
+     *
+     * @param database  The database.
      * @param resultSet The inspected schema.
      * @return The database containing the updated view/table.
      * @throws SQLException
@@ -152,31 +153,23 @@ public interface DataMapper {
                 .databaseId(table.getTdbid())
                 .description(resultSet.getString(11))
                 .build();
+        final String dataType = resultSet.getString(8);
         if (column.getColumnType().equals(ColumnTypeDto.ENUM)) {
-            column.setEnums(Arrays.stream(resultSet.getString(8)
-                            .substring(0, resultSet.getString(8).length() - 1)
+            column.setEnums(Arrays.stream(dataType.substring(0, resultSet.getString(8).length() - 1)
                             .replace("enum(", "")
                             .split(","))
                     .map(value -> value.replace("'", ""))
                     .toList());
         }
         if (column.getColumnType().equals(ColumnTypeDto.SET)) {
-            column.setSets(Arrays.stream(resultSet.getString(8)
-                            .substring(0, resultSet.getString(8).length() - 1)
+            column.setSets(Arrays.stream(dataType.substring(0, dataType.length() - 1)
                             .replace("set(", "")
                             .split(","))
                     .map(value -> value.replace("'", ""))
                     .toList());
         }
-        /* constraints */
-        if (resultSet.getString(9) != null && resultSet.getString(9).equals("PRI")) {
-            table.getConstraints().getPrimaryKey().add(PrimaryKeyDto.builder()
-                    .table(tableDtoToTableBriefDto(table))
-                    .column(columnDtoToColumnBriefDto(column))
-                    .build());
-        }
         /* fix boolean and set size for others */
-        if (resultSet.getString(8).equalsIgnoreCase("tinyint(1)")) {
+        if (dataType.startsWith("tinyint(1)")) {
             column.setColumnType(ColumnTypeDto.BOOL);
         } else if (resultSet.getString(5) != null) {
             column.setSize(resultSet.getLong(5));
@@ -196,6 +189,13 @@ public interface DataMapper {
                     .id(queryConfig.getDefaultTimeFormatId())
                     .build());
         }
+        /* constraints */
+        if (resultSet.getString(9) != null && resultSet.getString(9).equals("PRI")) {
+            table.getConstraints().getPrimaryKey().add(PrimaryKeyDto.builder()
+                    .table(tableDtoToTableBriefDto(table))
+                    .column(columnDtoToColumnBriefDto(column))
+                    .build());
+        }
         table.getColumns()
                 .add(column);
         return table;
@@ -241,8 +241,9 @@ public interface DataMapper {
 
     /**
      * Parse columns from a SQL statement of a known database.
+     *
      * @param database The database.
-     * @param query The SQL statement.
+     * @param query    The SQL statement.
      * @return The list of columns.
      * @throws JSQLParserException The table/view or column was not found in the database.
      */