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 b69d06b0aabd9bd76b686e9526a3cad52298c752..5b4f1b26257bfdae8050f9c312a8185e84f81f39 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
@@ -53,7 +53,6 @@ import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatterBuilder;
 import java.util.*;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 @Mapper(componentModel = "spring")
 public interface DataMapper {
@@ -678,7 +677,7 @@ public interface DataMapper {
                     ps.setNull(idx, Types.DATE);
                     break;
                 }
-                ps.setDate(idx, Date.valueOf(String.valueOf(value)));
+                ps.setString(idx, String.valueOf(value));
                 break;
             case BIGINT:
                 if (value == null) {
@@ -743,28 +742,7 @@ public interface DataMapper {
                 }
                 ps.setBoolean(idx, Boolean.parseBoolean(String.valueOf(value)));
                 break;
-            case TIMESTAMP:
-                if (value == null) {
-                    ps.setNull(idx, Types.TIMESTAMP);
-                    break;
-                }
-                ps.setTimestamp(idx, Timestamp.valueOf(String.valueOf(value)));
-                break;
-            case DATETIME:
-                if (value == null) {
-                    ps.setNull(idx, Types.TIMESTAMP);
-                    break;
-                }
-                ps.setTimestamp(idx, Timestamp.valueOf(String.valueOf(value)));
-                break;
-            case TIME:
-                if (value == null) {
-                    ps.setNull(idx, Types.TIME);
-                    break;
-                }
-                ps.setTime(idx, Time.valueOf(String.valueOf(value)));
-                break;
-            case YEAR:
+            case TIME, DATETIME, TIMESTAMP, YEAR:
                 if (value == null) {
                     ps.setNull(idx, Types.TIME);
                     break;
diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java
index 7f05bf84a58ad90788476850fed0765394f80ae2..92b1bbd16465a39b9d8e951acd00ba67ca063e11 100644
--- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java
+++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java
@@ -68,7 +68,7 @@ public class EndpointValidator {
         if (data == null) {
             throw new MalformedException("Validation failed: table data is null");
         }
-        final List<ColumnTypeDto> needSize = List.of(ColumnTypeDto.CHAR, ColumnTypeDto.VARCHAR, ColumnTypeDto.BINARY, ColumnTypeDto.VARBINARY, ColumnTypeDto.BIT, ColumnTypeDto.TINYINT, ColumnTypeDto.SMALLINT, ColumnTypeDto.MEDIUMINT, ColumnTypeDto.INT);
+        final List<ColumnTypeDto> needSize = List.of(ColumnTypeDto.CHAR, ColumnTypeDto.VARCHAR);
         final List<ColumnTypeDto> needSizeAndD = List.of(ColumnTypeDto.DOUBLE, ColumnTypeDto.DECIMAL);
         final List<ColumnTypeDto> needDateFormat = List.of(ColumnTypeDto.DATETIME, ColumnTypeDto.TIMESTAMP, ColumnTypeDto.TIME);
         /* check size */
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java
index 0a962f7d6edfe899365534a084a1faa265c6d864..986993ec787c7ad8e07ee340104f2200664a6323 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java
@@ -281,7 +281,7 @@ public class DatabaseServiceImpl implements DatabaseService {
         /* correct the unique constraint columns */
         for (Table table : database.getTables()) {
             for (Unique uniqueConstraint : table.getConstraints().getUniques()) {
-                uniqueConstraint.setColumns(uniqueConstraint.getColumns()
+                uniqueConstraint.setColumns(new LinkedList<>(uniqueConstraint.getColumns()
                         .stream()
                         .map(column -> {
                             final Optional<TableColumn> optional = table.getColumns()
@@ -294,7 +294,7 @@ public class DatabaseServiceImpl implements DatabaseService {
                             }
                             return optional.get();
                         })
-                        .toList());
+                        .toList()));
             }
         }
         /* update in metadata database */
diff --git a/dbrepo-ui/Dockerfile b/dbrepo-ui/Dockerfile
index 130ce0082d3a5a2c68300a6ce0ece873d81e162c..72a817ac8ab354004017e4007e000dac3fa95237 100644
--- a/dbrepo-ui/Dockerfile
+++ b/dbrepo-ui/Dockerfile
@@ -39,6 +39,7 @@ RUN chmod -R 755 /app/.output
 
 ENV NUXT_PUBLIC_VERSION="${APP_VERSION:-}"
 ENV NUXT_PUBLIC_COMMIT="${COMMIT:-}"
+ENV NODE_OPTIONS="--max_old_space_size=4096"
 
 EXPOSE 3000
 
diff --git a/dbrepo-ui/components/dialogs/EditTuple.vue b/dbrepo-ui/components/dialogs/EditTuple.vue
index 589c82b9b7aee5d2678e9ceab8249618878ced3f..da8000dae28372ec49fd8bfec8772a4bbe354fe0 100644
--- a/dbrepo-ui/components/dialogs/EditTuple.vue
+++ b/dbrepo-ui/components/dialogs/EditTuple.vue
@@ -179,6 +179,7 @@ export default {
     }
   },
   mounted() {
+    this.$refs.form.validate()
     this.oldTuple = Object.assign({}, this.tuple)
   },
   computed: {
@@ -212,7 +213,7 @@ export default {
         hint += ' ' + this.$t('pages.table.subpages.data.primary-key.hint')
       }
       if (['double', 'decimal'].includes(column_type)) {
-        hint += ' ' + this.$t('pages.table.subpages.data.format.hint') + ` ${'d'.repeat(size)}.${'f'.repeat(d)}`
+        hint += ' ' + this.$t('pages.table.subpages.data.format.hint') + ' ddd.f'
       }
       if (['date', 'datetime', 'timestamp', 'time'].includes(column_type) && date_format) {
         hint += ' ' + this.$t('pages.table.subpages.data.format.hint') + ' ' + date_format.unix_format
@@ -258,7 +259,7 @@ export default {
       rules.push(v => v !== null || this.$t('validation.required'))
       if (column.column_type === 'decimal' || column.column_type === 'double') {
         rules.push(v => !(!v || v.split('.')[0].length > column.size) || `${this.$t('pages.table.subpages.data.float.max')} ${column.size} ${this.$t('pages.table.subpages.data.float.before')}`)
-        rules.push(v => !(!v || v.split('.')[1].length > column.d) || `${this.$t('pages.table.subpages.data.float.max')} ${column.d} ${this.$t('pages.table.subpages.data.float.after')}`)
+        rules.push(v => !(!v || (column.d && v.split('.')[1].length > column.d)) || `${this.$t('pages.table.subpages.data.float.max')} ${column.d} ${this.$t('pages.table.subpages.data.float.after')}`)
       }
       return rules
     },
diff --git a/dbrepo-ui/composables/query-service.ts b/dbrepo-ui/composables/query-service.ts
index f5d805b958f27676f7f1031bfe56af16721b4378..16d7c0cfac7881fd5849f3135feccb1f29f0da7b 100644
--- a/dbrepo-ui/composables/query-service.ts
+++ b/dbrepo-ui/composables/query-service.ts
@@ -198,34 +198,34 @@ export const useQueryService = (): any => {
 
   function mySql8DataTypes(): MySql8DataType[] {
     return [
-      {value: 'bigint', text: 'BIGINT(size)', defaultSize: 255, defaultD: null, quoted: false, isBuildable: true},
-      {value: 'binary', text: 'BINARY(size)', defaultSize: 1, defaultD: null, quoted: false, isBuildable: false},
-      {value: 'bit', text: 'BIT(size)', defaultSize: 1, defaultD: null, quoted: false, isBuildable: true},
+      {value: 'bigint', text: 'BIGINT(size)', defaultSize: null, defaultD: null, quoted: false, isBuildable: true},
+      {value: 'binary', text: 'BINARY(size)', defaultSize: null, defaultD: null, quoted: false, isBuildable: false},
+      {value: 'bit', text: 'BIT(size)', defaultSize: null, defaultD: null, quoted: false, isBuildable: true},
       {value: 'blob', text: 'BLOB', defaultSize: null, defaultD: null, quoted: false, isBuildable: false},
       {value: 'bool', text: 'BOOL', defaultSize: null, defaultD: null, quoted: false, isBuildable: true},
       {value: 'char', text: 'CHAR(size)', defaultSize: 1, defaultD: null, quoted: true, isBuildable: true},
       {value: 'date', text: 'DATE', defaultSize: null, defaultD: null, quoted: true, isBuildable: true},
       {value: 'datetime', text: 'DATETIME(fsp)', defaultSize: null, defaultD: null, quoted: true, isBuildable: true},
-      {value: 'decimal', text: 'DECIMAL(size, d)', defaultSize: 40, defaultD: 10, quoted: false, isBuildable: true},
-      {value: 'double', text: 'DOUBLE(size, d)', defaultSize: 40, defaultD: 10, quoted: false, isBuildable: true},
+      {value: 'decimal', text: 'DECIMAL(size, d)', defaultSize: null, defaultD: null, quoted: false, isBuildable: true},
+      {value: 'double', text: 'DOUBLE(size, d)', defaultSize: null, defaultD: null, quoted: false, isBuildable: true},
       {value: 'enum', text: 'ENUM(val1,val2,...)', defaultSize: null, defaultD: null, quoted: true, isBuildable: true},
-      {value: 'float', text: 'FLOAT(p)', defaultSize: 24, defaultD: null, quoted: false, isBuildable: true},
-      {value: 'int', text: 'INT(size)', defaultSize: 255, defaultD: null, quoted: false, isBuildable: true},
+      {value: 'float', text: 'FLOAT(p)', defaultSize: null, defaultD: null, quoted: false, isBuildable: true},
+      {value: 'int', text: 'INT(size)', defaultSize: null, defaultD: null, quoted: false, isBuildable: true},
       {value: 'longblob', text: 'LONGBLOB', defaultSize: null, defaultD: null, quoted: false, isBuildable: false},
       {value: 'longtext', text: 'LONGTEXT', defaultSize: null, defaultD: null, quoted: true, isBuildable: true},
       {value: 'mediumblob', text: 'MEDIUMBLOB', defaultSize: null, defaultD: null, quoted: false, isBuildable: false},
-      {value: 'mediumint', text: 'MEDIUMINT(size)', defaultSize: 40, defaultD: null, quoted: false, isBuildable: true},
+      {value: 'mediumint', text: 'MEDIUMINT(size)', defaultSize: null, defaultD: null, quoted: false, isBuildable: true},
       {value: 'mediumtext', text: 'MEDIUMTEXT', defaultSize: null, defaultD: null, quoted: true, isBuildable: true},
       {value: 'set', text: 'SET(val1,val2,...)', defaultSize: null, defaultD: null, quoted: true, isBuildable: true},
-      {value: 'smallint', text: 'SMALLINT(size)', defaultSize: 10, defaultD: null, quoted: false, isBuildable: true},
+      {value: 'smallint', text: 'SMALLINT(size)', defaultSize: null, defaultD: null, quoted: false, isBuildable: true},
       {value: 'text', text: 'TEXT', defaultSize: null, defaultD: null, quoted: true, isBuildable: true},
       {value: 'time', text: 'TIME(fsp)', defaultSize: null, defaultD: null, quoted: true, isBuildable: true},
       {value: 'timestamp', text: 'TIMESTAMP(fsp)', defaultSize: null, defaultD: null, quoted: true, isBuildable: true},
       {value: 'tinyblob', text: 'TINYBLOB', defaultSize: null, defaultD: null, quoted: false, isBuildable: false},
-      {value: 'tinyint', text: 'TINYINT(size)', defaultSize: 10, defaultD: null, quoted: false, isBuildable: true},
+      {value: 'tinyint', text: 'TINYINT(size)', defaultSize: null, defaultD: null, quoted: false, isBuildable: true},
       {value: 'tinytext', text: 'TINYTEXT', defaultSize: null, defaultD: null, quoted: true, isBuildable: true},
       {value: 'year', text: 'YEAR', defaultSize: null, defaultD: null, quoted: true, isBuildable: true},
-      {value: 'varbinary', text: 'VARBINARY(size)', defaultSize: 1, defaultD: null, quoted: false, isBuildable: false},
+      {value: 'varbinary', text: 'VARBINARY(size)', defaultSize: null, defaultD: null, quoted: false, isBuildable: false},
       {value: 'varchar', text: 'VARCHAR(size)', defaultSize: 255, defaultD: null, quoted: true, isBuildable: true}
     ]
   }
diff --git a/dbrepo-ui/pages/database/[database_id]/table/create/schema.vue b/dbrepo-ui/pages/database/[database_id]/table/create/schema.vue
index 6642e89bf41e31326a42b5bae1e1100e0f04f5fb..79493ec39f3a13054df2e4b605f7da3fdb442805 100644
--- a/dbrepo-ui/pages/database/[database_id]/table/create/schema.vue
+++ b/dbrepo-ui/pages/database/[database_id]/table/create/schema.vue
@@ -269,13 +269,13 @@ export default {
           this.cacheStore.reloadDatabase()
           this.table = table
         })
-        .catch(({code}) => {
+        .catch(({code, message}) => {
           this.loading = false
           const toast = useToastInstance()
           if (typeof code !== 'string') {
             return
           }
-          toast.error(this.$t(code))
+          toast.error(message)
         })
         .finally(() => {
           this.loading = false
diff --git a/docker-compose.yml b/docker-compose.yml
index ad885ac97de322a7061772d3a2f43ff39bbe6eeb..b60c7b0d947551947bb261413946ce050d94ec87 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -8,6 +8,7 @@ volumes:
   storage-service-data:
   identity-service-data:
   metric-db-data:
+  dashboard-service-data:
 
 services:
   dbrepo-metadata-db: