diff --git a/packages/nc-gui/components/template/Editor.vue b/packages/nc-gui/components/template/Editor.vue index f621f79b37..6dbb1f73b0 100644 --- a/packages/nc-gui/components/template/Editor.vue +++ b/packages/nc-gui/components/template/Editor.vue @@ -133,7 +133,7 @@ const validators = computed(() => table.columns?.forEach((column, columnIdx) => { acc[`tables.${tableIdx}.columns.${columnIdx}.column_name`] = [ fieldRequiredValidator(), - fieldLengthValidator(base.value?.sources?.[0].type || ClientType.MYSQL), + fieldLengthValidator(), ] acc[`tables.${tableIdx}.columns.${columnIdx}.uidt`] = [fieldRequiredValidator()] if (isSelect(column)) { diff --git a/packages/nc-gui/composables/useColumnCreateStore.ts b/packages/nc-gui/composables/useColumnCreateStore.ts index 48c286cbe2..eef2133cf2 100644 --- a/packages/nc-gui/composables/useColumnCreateStore.ts +++ b/packages/nc-gui/composables/useColumnCreateStore.ts @@ -136,7 +136,7 @@ const [useProvideColumnCreateStore, useColumnCreateStore] = createInjectionState }) }, }, - fieldLengthValidator(source.value?.type || ClientType.MYSQL), + fieldLengthValidator(), ], uidt: [ { diff --git a/packages/nc-gui/utils/validation.ts b/packages/nc-gui/utils/validation.ts index 45f268a650..e69ca907a3 100644 --- a/packages/nc-gui/utils/validation.ts +++ b/packages/nc-gui/utils/validation.ts @@ -102,21 +102,17 @@ export const fieldRequiredValidator = () => { } } -export const fieldLengthValidator = (sqlClientType: string) => { +export const fieldLengthValidator = () => { return { validator: (rule: any, value: any) => { const { t } = getI18n().global - // no limit for sqlite but set as 255 - let fieldLengthLimit = 255 - - if (sqlClientType === 'mysql2' || sqlClientType === 'mysql') { - fieldLengthLimit = 64 - } else if (sqlClientType === 'pg') { - fieldLengthLimit = 59 - } else if (sqlClientType === 'mssql') { - fieldLengthLimit = 128 - } + /// mysql allows 64 characters for column_name + // postgres allows 59 characters for column_name + // mssql allows 128 characters for column_name + // sqlite allows any number of characters for column_name + // We allow 255 for all databases, truncate will be handled by backend for column_name + const fieldLengthLimit = 255 return new Promise((resolve, reject) => { if (value?.length > fieldLengthLimit) { diff --git a/packages/nocodb/src/services/tables.service.ts b/packages/nocodb/src/services/tables.service.ts index cf765556be..73198aeb68 100644 --- a/packages/nocodb/src/services/tables.service.ts +++ b/packages/nocodb/src/services/tables.service.ts @@ -459,7 +459,12 @@ export class TablesService { for (const column of param.table.columns) { if (!isVirtualCol(column)) { - column.column_name = sanitizeColumnName(column.column_name); + const mxColumnLength = Column.getMaxColumnNameLength(sqlClientType); + + // - 5 is a buffer for suffix + column.column_name = sanitizeColumnName( + column.column_name.slice(0, mxColumnLength - 5), + ); if (uniqueColumnNameCount[column.column_name]) { let suffix = 1;