• • •

Truncar Cadenas

El truncado de datos ocurre cuando una cadena de texto en Excel supera la capacidad definida en la columna de destino (VARCHAR, NVARCHAR, etc.). Mientras que la mayoría de los drivers lanzan una excepción que detiene toda la carga, Excel To Database te permite decidir el comportamiento deseado antes de iniciar el proceso.

Este CheckBox sólo aparecerá en aquellas columnas de tipo cadena de caracteres y donde el Proveedor de Datos, el Driver o la Base de Datos no son capaces de truncar las cadenas que exceden la longitud máxima permitida.
Excel To Database siempre mostrará un mensaje de advertencia cuando el dato a insertar en la columna exceda la cantidad máxima de caracteres o bytes permitidos.

Opción "Truncar Cadenas" no marcada: Excel To Database actúa como un seguro de integridad. Si la aplicación detecta que un dato de Excel no cabe en la columna de destino, detiene el proceso para evitar que se guarden datos incompletos.

Opción "Truncar Cadenas" marcada: Prioriza la continuidad de la carga. La aplicación ajusta automáticamente la longitud del texto al máximo permitido por la base de datos, permitiendo que el proceso finalice sin errores de desbordamiento.

MS Access: Truncar Cadenas

Para mostrar el comportamiento de esta opción con MS Access se utiliza una Base de Datos y el Libro Excel del apartado anterior. Del Libro Excel se utilizará la Hoja mostrada en la figura siguiente:

MS Access: Hoja Excel para [Tabla Truncar Cadenas]

MS Access: Hoja Excel para [Tabla Truncar Cadenas]

En las conexiones ODBC a MS Access, el proveedor de datos trunca la cadena de texto para que ésta pueda insertarse en el campo de texto. Es por ello que no aparecerá esta opción para este tipo de conexiones. Sin embargo, Excel To Database siempre mostrará un mensaje de advertencia.
Por el contrario, en la conexiones OLE DB esto no ocurre, por lo que si esta opción no se encuentra marcada se producirá un error en la fase de insercción de datos en la tabla:

Fila: 2
Comando: INSERT INTO [Tabla Valores Defecto] ([Texto 5 N Null N Empty Def Val], [Driver], [Proveedor Datos]) VALUES (?, ?, ?)
Comando Select: SELECT [Texto 5 N Null N Empty Def Val], [Driver], [Proveedor Datos] FROM [Tabla Valores Defecto]
Excepción:
{
  "$id": "1",
  "$type": "System.Data.OleDb.OleDbException, System.Data",
  "ErrorCode": -2147217833,
  "Errors": {
    "$type": "System.Data.OleDb.OleDbErrorCollection, System.Data",
    "$values": [
      {
        "$id": "2",
        "$type": "System.Data.OleDb.OleDbError, System.Data",
        "Message": "The field is too small to accept the amount of data you attempted to add. Try inserting or pasting less data.",
        "NativeError": -68551703,
        "Source": "Microsoft Access Database Engine",
        "SQLState": "3163"
      }
    ]
  },
  "Message": "The field is too small to accept the amount of data you attempted to add. Try inserting or pasting less data.",
  "Data": {
    "$type": "System.Collections.ListDictionaryInternal, mscorlib"
  },
  "InnerException": null,
  "HelpLink": null,
  "Source": "Microsoft Access Database Engine",
  "HResult": -2147217833
}

    Columna: Texto 5 N Null N Empty Def Val    Valor: 123456    Error: La Column 'Texto 5 N Null N Empty Def Val' superó el límite de MaxLength.
    Columna: Driver    Valor: Microsoft.ACE.OLEDB.16.0
    Columna: Proveedor Datos    Valor: OLE DB
Se ha producido una excepción al intentar cargar la Tabla 'Tabla Valores Defecto'. Error en la Fila: 2
    Query que indica las columnas utilizadas de la Tabla:
    SELECT [Texto 5 N Null N Empty Def Val], [Driver], [Proveedor Datos] FROM [Tabla Valores Defecto]
{
  "$id": "1",
  "$type": "System.Data.OleDb.OleDbException, System.Data",
  "ErrorCode": -2147217833,
  "Errors": {
    "$type": "System.Data.OleDb.OleDbErrorCollection, System.Data",
    "$values": [
      {
        "$id": "2",
        "$type": "System.Data.OleDb.OleDbError, System.Data",
        "Message": "The field is too small to accept the amount of data you attempted to add. Try inserting or pasting less data.",
        "NativeError": -68551703,
        "Source": "Microsoft Access Database Engine",
        "SQLState": "3163"
      }
    ]
  },
  "Message": "The field is too small to accept the amount of data you attempted to add. Try inserting or pasting less data.",
  "Data": {
    "$type": "System.Collections.ListDictionaryInternal, mscorlib"
  },
  "InnerException": null,
  "HelpLink": null,
  "Source": "Microsoft Access Database Engine",
  "HResult": -2147217833
}

Nº Filas insertadas: 0

Como ya se ha mencionado, algunos Proveedores de Datos, Drivers y/o Bases de Datos truncan ellos mismos las cadenas de caracteres que exceden la longitud máxima permitida. Para ellos, Excel To Database no muestra este CheckBox, pero si muestran un mensaje indicando este hecho.
Es posible que, en algunos casos, durante la fase de inserción de datos se muestre un error indicando este hecho, sin embargo, la inserción de datos se realiza correctamente. Un ejemplo de ello es el Proveedor de Datos de ODBC con MS Access.

MS Access: ODBC Truncar Cadenas

MS Access: ODBC Truncar Cadenas

Por último, destacar que los campos de tipo "Texto largo", aunque tiene una limitación en el tamaño del campo, se supone que será lo suficientemente grande como para que no se tenga en cuenta.

SQL Server: Truncar Cadenas

En primer lugar, se ha de comprender correctamente qué puede almacendar cada tipo de datos y la influencia del COLLATION en la definción del campo. Para ello, se recomienda la lectura de: Compatibilidad con UTF-8 y prestar especial atención a la "Sugerencia" indicada en ese apartado, donde se indica muy claramente el significado de "n" en "char(n)", "varchar(n)", "nchar(n)" y "nvarchar(n)". Y, por supuesto, comprender muy bien cada tipo de datos: Cadenas de caracteres y Cadenas de caracteres Unicode.
Como nota aclaratoria sobre lo que se puede almacenar en estos campos, se recomienda la lectura de: NVARCHAR storing characters not supported by UCS-2 encoding on SQL Server y el artículo referenciado: How Many Bytes Per Character in SQL Server: a Completely Complete Guide.

Para mostrar el comportamiento de esta opción con SQL Server se utiliza la siguiente tabla. Los tipos de datos "text" y "ntext" no admiten collations con SC o UTF8. Estos tipos de datos se pueden considerar obsoletos.

DROP TABLE IF EXISTS [dbo].[Tabla Truncar Cadenas];
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Tabla Truncar Cadenas](
  [Char5]                [char](5)       COLLATE Modern_Spanish_100_CS_AS         NULL,
  [Char5UTF8]            [char](5)       COLLATE Modern_Spanish_100_CS_AS_SC_UTF8 NULL,
  [VarChar5]             [varchar](5)    COLLATE Modern_Spanish_100_CS_AS         NULL,
  [VarChar5UTF8]         [varchar](5)    COLLATE Modern_Spanish_100_CS_AS_SC_UTF8 NULL,
  [Text]                 [text]          COLLATE Modern_Spanish_100_CS_AS         NULL,
  --[TextUTF8]             [text]          COLLATE Modern_Spanish_100_CS_AS_SC_UTF8 NULL,
  [NChar5]               [nchar](5)      COLLATE Modern_Spanish_100_CS_AS         NULL,
  [NChar5UTF8]           [nchar](5)      COLLATE Modern_Spanish_100_CS_AS_SC_UTF8 NULL,
  [NVarChar5]            [nvarchar](5)   COLLATE Modern_Spanish_100_CS_AS         NULL,
  [NVarChar5UTF8]        [nvarchar](5)   COLLATE Modern_Spanish_100_CS_AS_SC_UTF8 NULL,
  [NText]                [ntext]         COLLATE Modern_Spanish_100_CS_AS         NULL,
  --[NTextUTF8]            [ntext]         COLLATE Modern_Spanish_100_CS_AS_SC_UTF8 NULL,

  [Provider]             [varchar](10)   COLLATE Modern_Spanish_100_CS_AS     NOT NULL,
  [Driver]               [varchar](50)   COLLATE Modern_Spanish_100_CS_AS     NOT NULL,
  [Identidad]            [int]                              IDENTITY(1,1)     NOT NULL,
PRIMARY KEY CLUSTERED 
(
  [Identidad] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
       ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

El Libro a utilizar es el Libro del apartado anterior, el cual contiene la Hoja de la figura siguiente:

SQL Server: Hoja Excel para [Tabla Truncar Cadenas]

SQL Server: Hoja Excel para [Tabla Truncar Cadenas]

En segundo lugar, se ha de tener en cuenta que ninguno de los Proveedores de Datos ni Drivers para SQL Server truncan las cadenas de caracteres, al contrario de lo que sucede para ODBC en MS Access. Así, si la opción "Truncar Cadenas" no se encuentra marcada, Excel To Database avisará de los posibles problemas, pero se intentará cargar los datos. Esto hará que en la fase de carga se produzca un error.

Conexiones .NET (System.Data.SqlClient)

Se ha producido una excepción durante la carga de los datos en el DataTable.
Algunas restricciones no se cumplen.
    Mensaje: No se pudieron habilitar las restricciones. Una o varias filas contienen valores que infringen las restricciones NON-NULL, UNIQUE o FOREIGN-KEY.
Se intentará cargar los datos, aunque es muy probable que la carga falle.

        Lectura Datos Hoja 'SQL Server - Truncar Cadenas': 00:00:00.0559934

Se ha producido una excepción durante la carga de datos en la Tabla 'dbo.Tabla Truncar Cadenas'.
    Query que indica las columnas utilizadas de la Tabla:
    SELECT [NText], [NVarChar5UTF8], [NVarChar5], [NChar5UTF8], [NChar5], [Text], [VarChar5UTF8], [VarChar5], [Char5UTF8], [Char5], [Driver], [Provider] FROM [dbo].[Tabla Truncar Cadenas]
{
  "$id": "1",
  "$type": "System.InvalidOperationException, mscorlib",
  "Message": "El valor del tipo especificado String del origen de datos no se puede convertir al tipo nvarchar de la columna de destino especificada.",
  "Data": {
    "$type": "System.Collections.ListDictionaryInternal, mscorlib"
  },
  "InnerException": {
    "$type": "System.InvalidOperationException, mscorlib",
    "Message": "Los datos binary o de tipo String se truncarían.",
    "Data": {
      "$type": "System.Collections.ListDictionaryInternal, mscorlib"
    },
    "InnerException": null,
    "StackTrace": "   en System.Data.SqlClient.SqlBulkCopy.ConvertValue(Object value, _SqlMetaData metadata, Boolean isNull, Boolean& isSqlType, Boolean& coercedToDataFeed)",
    "HelpLink": null,
    "Source": "System.Data",
    "HResult": -2146233079
  },
  "HelpLink": null,
  "Source": "System.Data",
  "HResult": -2146233079
}


Conexiones OLE DB (MSOLEDBSQL19)

Fila: 2
Comando: INSERT INTO [dbo].[Tabla Truncar Cadenas] ([NText], [NVarChar5UTF8], [NVarChar5], [NChar5UTF8], [NChar5], [Text], [VarChar5UTF8], [VarChar5], [Char5UTF8], [Char5], [Driver], [Provider]) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Comando Select: SELECT [NText], [NVarChar5UTF8], [NVarChar5], [NChar5UTF8], [NChar5], [Text], [VarChar5UTF8], [VarChar5], [Char5UTF8], [Char5], [Driver], [Provider] FROM [dbo].[Tabla Truncar Cadenas]
Excepción:
{
  "$id": "1",
  "$type": "System.Data.OleDb.OleDbException, System.Data",
  "ErrorCode": -2147217833,
  "Errors": {
    "$type": "System.Data.OleDb.OleDbErrorCollection, System.Data",
    "$values": [
      {
        "$id": "2",
        "$type": "System.Data.OleDb.OleDbError, System.Data",
        "Message": "The statement has been terminated.",
        "NativeError": 3621,
        "Source": "Microsoft OLE DB Driver 19 for SQL Server",
        "SQLState": "01000"
      },
      {
        "$id": "3",
        "$type": "System.Data.OleDb.OleDbError, System.Data",
        "Message": "String or binary data would be truncated in table 'dbo.Tabla Truncar Cadenas', column 'NVarChar5UTF8'. Truncated value: '12345'.",
        "NativeError": 2628,
        "Source": "Microsoft OLE DB Driver 19 for SQL Server",
        "SQLState": "22001"
      }
    ]
  },
  "Message": "The statement has been terminated.
String or binary data would be truncated in table 'dbo.Tabla Truncar Cadenas', column 'NVarChar5UTF8'. Truncated value: '12345'.",
  "Data": {
    "$type": "System.Collections.ListDictionaryInternal, mscorlib"
  },
  "InnerException": null,
  "HelpLink": null,
  "Source": "Microsoft OLE DB Driver 19 for SQL Server",
  "HResult": -2147217833
}

    Columna: NText    Valor: 123456
    Columna: NVarChar5UTF8    Valor: 123456
    Columna: NVarChar5    Valor: 123456
    Columna: NChar5UTF8    Valor: 123456
    Columna: NChar5    Valor: 123456
    Columna: Text    Valor: 123456
    Columna: VarChar5UTF8    Valor: 123456
    Columna: VarChar5    Valor: 123456
    Columna: Char5UTF8    Valor: 123456
    Columna: Char5    Valor: 123456
    Columna: Driver    Valor: MSOLEDBSQL19.1
    Columna: Provider    Valor: OLE DB
Se ha producido una excepción al intentar cargar la Tabla 'dbo.Tabla Truncar Cadenas'. Error en la Fila: 2
    Query que indica las columnas utilizadas de la Tabla:
    SELECT [NText], [NVarChar5UTF8], [NVarChar5], [NChar5UTF8], [NChar5], [Text], [VarChar5UTF8], [VarChar5], [Char5UTF8], [Char5], [Driver], [Provider] FROM [dbo].[Tabla Truncar Cadenas]
{
  "$id": "1",
  "$type": "System.Data.OleDb.OleDbException, System.Data",
  "ErrorCode": -2147217833,
  "Errors": {
    "$type": "System.Data.OleDb.OleDbErrorCollection, System.Data",
    "$values": [
      {
        "$id": "2",
        "$type": "System.Data.OleDb.OleDbError, System.Data",
        "Message": "The statement has been terminated.",
        "NativeError": 3621,
        "Source": "Microsoft OLE DB Driver 19 for SQL Server",
        "SQLState": "01000"
      },
      {
        "$id": "3",
        "$type": "System.Data.OleDb.OleDbError, System.Data",
        "Message": "String or binary data would be truncated in table 'dbo.Tabla Truncar Cadenas', column 'NVarChar5UTF8'. Truncated value: '12345'.",
        "NativeError": 2628,
        "Source": "Microsoft OLE DB Driver 19 for SQL Server",
        "SQLState": "22001"
      }
    ]
  },
  "Message": "The statement has been terminated.
String or binary data would be truncated in table 'dbo.Tabla Truncar Cadenas', column 'NVarChar5UTF8'. Truncated value: '12345'.",
  "Data": {
    "$type": "System.Collections.ListDictionaryInternal, mscorlib"
  },
  "InnerException": null,
  "HelpLink": null,
  "Source": "Microsoft OLE DB Driver 19 for SQL Server",
  "HResult": -2147217833
}

Nº Filas insertadas: 0


Conexiones ODBC ({ODBC Driver 18 for SQL Server})

Fila: 2
Comando: INSERT INTO [dbo].[Tabla Truncar Cadenas] ([NText], [NVarChar5UTF8], [NVarChar5], [NChar5UTF8], [NChar5], [Text], [VarChar5UTF8], [VarChar5], [Char5UTF8], [Char5], [Driver], [Provider]) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Comando Select: SELECT [NText], [NVarChar5UTF8], [NVarChar5], [NChar5UTF8], [NChar5], [Text], [VarChar5UTF8], [VarChar5], [Char5UTF8], [Char5], [Driver], [Provider] FROM [dbo].[Tabla Truncar Cadenas]
Excepción:
{
  "$id": "1",
  "$type": "System.Data.Odbc.OdbcException, System.Data",
  "Errors": {
    "$type": "System.Data.Odbc.OdbcErrorCollection, System.Data",
    "$values": [
      {
        "$id": "2",
        "$type": "System.Data.Odbc.OdbcError, System.Data",
        "Message": "[Microsoft][ODBC Driver 18 for SQL Server][SQL Server]String or binary data would be truncated in table 'dbo.Tabla Truncar Cadenas', column 'NVarChar5UTF8'. Truncated value: '12345'.",
        "SQLState": "42000",
        "NativeError": 2628,
        "Source": "msodbcsql18.dll"
      },
      {
        "$id": "3",
        "$type": "System.Data.Odbc.OdbcError, System.Data",
        "Message": "[Microsoft][ODBC Driver 18 for SQL Server][SQL Server]The statement has been terminated.",
        "SQLState": "01000",
        "NativeError": 3621,
        "Source": "msodbcsql18.dll"
      }
    ]
  },
  "Source": "msodbcsql18.dll",
  "ErrorCode": -2146232009,
  "Message": "ERROR [42000] [Microsoft][ODBC Driver 18 for SQL Server][SQL Server]String or binary data would be truncated in table 'dbo.Tabla Truncar Cadenas', column 'NVarChar5UTF8'. Truncated value: '12345'.
ERROR [01000] [Microsoft][ODBC Driver 18 for SQL Server][SQL Server]The statement has been terminated.",
  "Data": {
    "$type": "System.Collections.ListDictionaryInternal, mscorlib"
  },
  "InnerException": null,
  "HelpLink": null,
  "HResult": -2146232009
}

    Columna: NText    Valor: 123456
    Columna: NVarChar5UTF8    Valor: 123456
    Columna: NVarChar5    Valor: 123456
    Columna: NChar5UTF8    Valor: 123456
    Columna: NChar5    Valor: 123456
    Columna: Text    Valor: 123456
    Columna: VarChar5UTF8    Valor: 123456
    Columna: VarChar5    Valor: 123456
    Columna: Char5UTF8    Valor: 123456
    Columna: Char5    Valor: 123456
    Columna: Driver    Valor: {ODBC Driver 18 for SQL Server}
    Columna: Provider    Valor: ODBC
Se ha producido una excepción al intentar cargar la Tabla 'dbo.Tabla Truncar Cadenas'. Error en la Fila: 2
    Query que indica las columnas utilizadas de la Tabla:
    SELECT [NText], [NVarChar5UTF8], [NVarChar5], [NChar5UTF8], [NChar5], [Text], [VarChar5UTF8], [VarChar5], [Char5UTF8], [Char5], [Driver], [Provider] FROM [dbo].[Tabla Truncar Cadenas]
{
  "$id": "1",
  "$type": "System.Data.Odbc.OdbcException, System.Data",
  "Errors": {
    "$type": "System.Data.Odbc.OdbcErrorCollection, System.Data",
    "$values": [
      {
        "$id": "2",
        "$type": "System.Data.Odbc.OdbcError, System.Data",
        "Message": "[Microsoft][ODBC Driver 18 for SQL Server][SQL Server]String or binary data would be truncated in table 'dbo.Tabla Truncar Cadenas', column 'NVarChar5UTF8'. Truncated value: '12345'.",
        "SQLState": "42000",
        "NativeError": 2628,
        "Source": "msodbcsql18.dll"
      },
      {
        "$id": "3",
        "$type": "System.Data.Odbc.OdbcError, System.Data",
        "Message": "[Microsoft][ODBC Driver 18 for SQL Server][SQL Server]The statement has been terminated.",
        "SQLState": "01000",
        "NativeError": 3621,
        "Source": "msodbcsql18.dll"
      }
    ]
  },
  "Source": "msodbcsql18.dll",
  "ErrorCode": -2146232009,
  "Message": "ERROR [42000] [Microsoft][ODBC Driver 18 for SQL Server][SQL Server]String or binary data would be truncated in table 'dbo.Tabla Truncar Cadenas', column 'NVarChar5UTF8'. Truncated value: '12345'.
ERROR [01000] [Microsoft][ODBC Driver 18 for SQL Server][SQL Server]The statement has been terminated.",
  "Data": {
    "$type": "System.Collections.ListDictionaryInternal, mscorlib"
  },
  "InnerException": null,
  "HelpLink": null,
  "HResult": -2146232009
}

Nº Filas insertadas: 0

Cuando se marca la opción "Truncar Cadenas", conviene destacar que Excel To Database trunca las cadenas teniendo en cuenta la capacidad máxima de caracteres y/o bytes permitidos por el campo. Así, al cargar los datos indicados anteriormente, en el Panel de Resultados se obtienen los siguientes mensajes, donde se puede observar que la cadena es recortada para que cumpla el criterio mas restrictivo.

Celda: A3, Valor: 123456, Tabla: dbo.Tabla Truncar Cadenas, Columna: Char5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 12345

Celda: B3, Valor: 123456, Tabla: dbo.Tabla Truncar Cadenas, Columna: Char5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 12345

Celda: C3, Valor: 123456, Tabla: dbo.Tabla Truncar Cadenas, Columna: VarChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 12345

Celda: D3, Valor: 123456, Tabla: dbo.Tabla Truncar Cadenas, Columna: VarChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 12345

Celda: F3, Valor: 123456, Tabla: dbo.Tabla Truncar Cadenas, Columna: NChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 12345

Celda: G3, Valor: 123456, Tabla: dbo.Tabla Truncar Cadenas, Columna: NChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 12345

Celda: H3, Valor: 123456, Tabla: dbo.Tabla Truncar Cadenas, Columna: NVarChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 12345

Celda: I3, Valor: 123456, Tabla: dbo.Tabla Truncar Cadenas, Columna: NVarChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 12345

Celda: A4, Valor: 👧2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: Char5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: ??234

Celda: B4, Valor: 👧2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: Char5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👧2

Celda: C4, Valor: 👧2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: VarChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: ??234

Celda: D4, Valor: 👧2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: VarChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👧2

Celda: F4, Valor: 👧2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: NChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👧234

Celda: G4, Valor: 👧2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: NChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👧234

Celda: H4, Valor: 👧2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: NVarChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👧234

Celda: I4, Valor: 👧2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: NVarChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👧234

Celda: A5, Valor: ⚕️2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: Char5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: ??234

Celda: B5, Valor: ⚕️2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: Char5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: ⚕?

Celda: C5, Valor: ⚕️2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: VarChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: ??234

Celda: D5, Valor: ⚕️2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: VarChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: ⚕?

Celda: F5, Valor: ⚕️2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: NChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: ⚕️234

Celda: G5, Valor: ⚕️2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: NChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: ⚕️234

Celda: H5, Valor: ⚕️2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: NVarChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: ⚕️234

Celda: I5, Valor: ⚕️2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: NVarChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: ⚕️234

Celda: A6, Valor: 芦󠄀2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: Char5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: ???23

Celda: B6, Valor: 芦󠄀2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: Char5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 芦?

Celda: C6, Valor: 芦󠄀2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: VarChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: ???23

Celda: D6, Valor: 芦󠄀2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: VarChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 芦?

Celda: F6, Valor: 芦󠄀2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: NChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 芦󠄀23

Celda: G6, Valor: 芦󠄀2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: NChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 芦󠄀23

Celda: H6, Valor: 芦󠄀2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: NVarChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 芦󠄀23

Celda: I6, Valor: 芦󠄀2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: NVarChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 芦󠄀23

Celda: B7, Valor: €2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: Char5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: €23

Celda: D7, Valor: €2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: VarChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: €23

Celda: A8, Valor: 12.345, Tabla: dbo.Tabla Truncar Cadenas, Columna: Char5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 12.34

Celda: B8, Valor: 12.345, Tabla: dbo.Tabla Truncar Cadenas, Columna: Char5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 12.34

Celda: C8, Valor: 12.345, Tabla: dbo.Tabla Truncar Cadenas, Columna: VarChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 12.34

Celda: D8, Valor: 12.345, Tabla: dbo.Tabla Truncar Cadenas, Columna: VarChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 12.34

Celda: F8, Valor: 12.345, Tabla: dbo.Tabla Truncar Cadenas, Columna: NChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 12.34

Celda: G8, Valor: 12.345, Tabla: dbo.Tabla Truncar Cadenas, Columna: NChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 12.34

Celda: H8, Valor: 12.345, Tabla: dbo.Tabla Truncar Cadenas, Columna: NVarChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 12.34

Celda: I8, Valor: 12.345, Tabla: dbo.Tabla Truncar Cadenas, Columna: NVarChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 12.34

Celda: A9, Valor: 气前照灯5, Tabla: dbo.Tabla Truncar Cadenas, Columna: Char5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada. Los valores se modifican adaptándolos a la Página de Códigos de la Columna de Destino.
    Valor Modificado: ????5

Celda: B9, Valor: 气前照灯5, Tabla: dbo.Tabla Truncar Cadenas, Columna: Char5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 气?

Celda: C9, Valor: 气前照灯5, Tabla: dbo.Tabla Truncar Cadenas, Columna: VarChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada. Los valores se modifican adaptándolos a la Página de Códigos de la Columna de Destino.
    Valor Modificado: ????5

Celda: D9, Valor: 气前照灯5, Tabla: dbo.Tabla Truncar Cadenas, Columna: VarChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 气?

Celda: A10, Valor: 👨‍👩‍👧‍👦2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: Char5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: ?????

Celda: B10, Valor: 👨‍👩‍👧‍👦2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: Char5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👨?

Celda: C10, Valor: 👨‍👩‍👧‍👦2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: VarChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: ?????

Celda: D10, Valor: 👨‍👩‍👧‍👦2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: VarChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👨?

Celda: F10, Valor: 👨‍👩‍👧‍👦2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: NChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👨‍👩

Celda: G10, Valor: 👨‍👩‍👧‍👦2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: NChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👨‍👩

Celda: H10, Valor: 👨‍👩‍👧‍👦2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: NVarChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👨‍👩

Celda: I10, Valor: 👨‍👩‍👧‍👦2345, Tabla: dbo.Tabla Truncar Cadenas, Columna: NVarChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👨‍👩

Celda: A11, Valor: 👨👩👧👦5, Tabla: dbo.Tabla Truncar Cadenas, Columna: Char5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: ?????

Celda: B11, Valor: 👨👩👧👦5, Tabla: dbo.Tabla Truncar Cadenas, Columna: Char5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👨?

Celda: C11, Valor: 👨👩👧👦5, Tabla: dbo.Tabla Truncar Cadenas, Columna: VarChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: ?????

Celda: D11, Valor: 👨👩👧👦5, Tabla: dbo.Tabla Truncar Cadenas, Columna: VarChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👨?

Celda: F11, Valor: 👨👩👧👦5, Tabla: dbo.Tabla Truncar Cadenas, Columna: NChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👨👩?

Celda: G11, Valor: 👨👩👧👦5, Tabla: dbo.Tabla Truncar Cadenas, Columna: NChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👨👩?

Celda: H11, Valor: 👨👩👧👦5, Tabla: dbo.Tabla Truncar Cadenas, Columna: NVarChar5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👨👩?

Celda: I11, Valor: 👨👩👧👦5, Tabla: dbo.Tabla Truncar Cadenas, Columna: NVarChar5UTF8, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👨👩?

Destacar que en algunos casos Excel To Database mejora el comportamiento de SQL Server Management Studio (concretamente la versión 20.0.70.0):

INSERT INTO dbo.[Tabla Truncar Cadenas]
(Char5UTF8, Provider, Driver)
values
(N'⚕️2345','SSMS','SSMS')

Mens. 2628, Nivel 16, Estado 1, Línea 1
Los datos binarios o de la cadena se truncan en la columna "Char5UTF8" de la tabla "dbo.Tabla Truncar Cadenas". Valor truncado: "     ".
Se terminó la instrucción.

La respuesta correcta debería haber sido:
"⚕? " o algo similar y no 5 espacios en blanco.
Notese la diferencia entre '⚕️' y '⚕'.

Oracle: Truncar Cadenas

Para mostrar el comportamiento de esta opción con Oracle se utiliza la siguiente tabla.

CREATE TABLE "Tabla Truncar Cadenas" (
  Id NUMBER(6) GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  Provider                  VARCHAR2(10 CHAR),
  Driver                    VARCHAR2(50 CHAR),

  "Char 5"                  CHAR(5 CHAR),
  "Char 5 BYTE"             CHAR(5 BYTE),
  "VarChar 5"               VARCHAR(5),

  "VarChar2 5 Invisible"    VARCHAR2(5 CHAR) INVISIBLE,
  "VarChar2 5"              VARCHAR2(5 CHAR),
  "VarChar2 5 BYTE"         VARCHAR2(5 BYTE),

  "NChar 5"                 NCHAR(5),
  "NVarChar2 5"             NVARCHAR2(5),

  "CLOB"                    CLOB,
  "NCLOB"                   NCLOB
);

El Libro a utilizar es el Libro del apartado anterior, el cual contiene la Hoja de la figura siguiente:

Oracle: Hoja Excel para [Tabla Truncar Cadenas]

Oracle: Hoja Excel para [Tabla Truncar Cadenas]

Al igual que ocurre con SQL Server, ninguno de los Proveedores de Datos ni Drivers truncan las cadenas de caracteres.

Conviene destacar el tremendo problema descrito en Managed Driver cuando se usa con la caracterítica Bulk Copy (opción "Usar Arrays" no marcada). En este caso, el driver inserta en la base de datos CUALQUIER COSA sin que ésta tenga que cumplir ninguna de las restricciones definidas en los campos de la tabla (CHECK, FOREIGN KEY, DEFAULTS, INSERT TRIGGERS e índices pueden quedar en un estado no usable). Las consecuencias de este comportamiento pueden ser desastrosas para la base de datos.
Así, la carga de la Hoja anterior con la caracterítica Bulk Copy y la opción "Truncar Cadenas" no marcada (sin las comprobaciones que realiza Excel To Database) se obtiene la siguiente carga:

Oracle: Bug Restricciones BulkCopy

Oracle: Bug Restricciones BulkCopy

Como se puede apreciar, existen registros para el campo "Char 5 BYTE" que superan ampliamente la restricción de no superar los 5 bytes. Esto hace que la tabla se quede en un estado inconsistente y, por ejemplo, la instrucción 'SELECT * FROM "Tabla Truncar Cadenas" order by ID;' no funcione en "Oracle SQL Developer" debido a la reconstrucción del índice tras la inserción con BulkCopy.

Oracle: Bug Índices BulkCopy

Oracle: Bug Índices BulkCopy

Excel To Database contiene una serie de chequeos para que este tipo de cosas no ocurran. Así, en el "Panel de Resultados" se muestran mensajes del estilo:

Celda: A2, Valor: 123456, Tabla: Tabla Truncar Cadenas, Columna: Char 5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: -
    Supera Nº Máx caracteres/bytes permitidos. Valor Admitido: 12345
    El Managed Driver de Oracle con NO Arrays contiene un bug que permite insertar cadenas de caracteres que no cumplen las restricciones.
    Marque la opción "Truncar Cadenas".
    No se ejecutará la Fase de carga de datos.

Celda: B2, Valor: 123456, Tabla: Tabla Truncar Cadenas, Columna: Char 5 BYTE, Nº Máx caracteres permitidos: -, Nº Máx bytes permitidos: 5
    Supera Nº Máx caracteres/bytes permitidos. Valor Admitido: 12345
    El Managed Driver de Oracle con NO Arrays contiene un bug que permite insertar cadenas de caracteres que no cumplen las restricciones.
    Marque la opción "Truncar Cadenas".
    No se ejecutará la Fase de carga de datos.
...

Con el Managed Driver y la caracterítica Array Binding (opción "Usar Arrays" marcada), o con los Drivers OLE DB y ODBC el comportamiento es diferente. Aunque Excel To Database muestra los mensajes de aviso pertinentes, se inicia la fase de carga de datos y es ahí donde se producen los errores. Los mensajes que aparecen en los ficheros de .log serán similares a los siguientes:

.NET Connections (Managed Driver (Array Binding) (CheckBox "Usar Arrays" marcado))

SSe ha producido una excepción al intentar cargar la Tabla 'Tabla Truncar Cadenas'.
    Comando Insert: insert into "Tabla Truncar Cadenas" ("Char 5", "DRIVER", "PROVIDER") values(:0, :1, :2)
{
  "$id": "1",
  "$type": "Oracle.ManagedDataAccess.Client.OracleException, Oracle.ManagedDataAccess",
  "OracleLogicalTransaction": {
    "$type": "Oracle.ManagedDataAccess.Client.OracleLogicalTransaction, Oracle.ManagedDataAccess",
    "Committed": null,
    "UserCallCompleted": null,
    "ConnectionString": null,
    "LogicalTransactionId": null
  },
  "Errors": {
    "$type": "Oracle.ManagedDataAccess.Client.OracleErrorCollection, Oracle.ManagedDataAccess",
    "$values": [
      {
        "$id": "2",
        "$type": "Oracle.ManagedDataAccess.Client.OracleError, Oracle.ManagedDataAccess",
        "DataSource": "",
        "Message": "ORA-24381: error(s) in array DML
https://docs.oracle.com/error-help/db/ora-24381/",
        "Number": 24381,
        "ParseErrorOffset": 77,
        "Procedure": "",
        "Source": "Oracle Data Provider for .NET, Managed Driver",
        "ArrayBindIndex": -1
      },
      {
        "$id": "3",
        "$type": "Oracle.ManagedDataAccess.Client.OracleError, Oracle.ManagedDataAccess",
        "DataSource": "",
        "Message": "ORA-12899: value too large for column \"C##USUARIOORACLE\".\"Tabla Truncar Cadenas\".\"Char 5\" (actual: 6, maximum: 5)
https://docs.oracle.com/error-help/db/ora-12899/",
        "Number": 12899,
        "ParseErrorOffset": -1,
        "Procedure": "",
        "Source": "Oracle Data Provider for .NET, Managed Driver",
        "ArrayBindIndex": 0
      },
...
      {
        "$id": "7",
        "$type": "Oracle.ManagedDataAccess.Client.OracleError, Oracle.ManagedDataAccess",
        "DataSource": "",
        "Message": "ORA-12899: value too large for column \"C##USUARIOORACLE\".\"Tabla Truncar Cadenas\".\"Char 5\" (actual: 11, maximum: 5)
https://docs.oracle.com/error-help/db/ora-12899/",
        "Number": 12899,
        "ParseErrorOffset": -1,
        "Procedure": "",
        "Source": "Oracle Data Provider for .NET, Managed Driver",
        "ArrayBindIndex": 7
      }
    ]
  },
  "DataSource": "",
  "Message": "ORA-24381: error(s) in array DML
https://docs.oracle.com/error-help/db/ora-24381/\nORA-12899: value too large for column \"C##USUARIOORACLE\".\"Tabla Truncar Cadenas\".\"Char 5\" (actual: 6, maximum: 5)
https://docs.oracle.com/error-help/db/ora-12899/\nORA-12899: value too large for column \"C##USUARIOORACLE\".\"Tabla Truncar Cadenas\".\"Char 5\" (actual: 6, maximum: 5)
https://docs.oracle.com/error-help/db/ora-12899/\nORA-12899: value too large for column \"C##USUARIOORACLE\".\"Tabla Truncar Cadenas\".\"Char 5\" (actual: 6, maximum: 5)
https://docs.oracle.com/error-help/db/ora-12899/\nORA-12899: value too large for column \"C##USUARIOORACLE\".\"Tabla Truncar Cadenas\".\"Char 5\" (actual: 6, maximum: 5)
https://docs.oracle.com/error-help/db/ora-12899/\nORA-12899: value too large for column \"C##USUARIOORACLE\".\"Tabla Truncar Cadenas\".\"Char 5\" (actual: 11, maximum: 5)
https://docs.oracle.com/error-help/db/ora-12899/",
  "Procedure": "",
  "Source": "Oracle Data Provider for .NET, Managed Driver",
  "Number": 24381,
  "IsRecoverable": false,
  "ErrorCode": -2147467259,
  "Data": {
    "$type": "System.Collections.ListDictionaryInternal, mscorlib"
  },
  "InnerException": null,
  "HelpLink": null,
  "HResult": -2147467259
}

    Error en la Fila Excel: '2' Error de Oracle: '12899'
    Valor: 123456
    Mensaje: ORA-12899: value too large for column "C##USUARIOORACLE"."Tabla Truncar Cadenas"."Char 5" (actual: 6, maximum: 5)
https://docs.oracle.com/error-help/db/ora-12899/
    Error en la Fila Excel: '4' Error de Oracle: '12899'
    Valor: ⚕️2345
    Mensaje: ORA-12899: value too large for column "C##USUARIOORACLE"."Tabla Truncar Cadenas"."Char 5" (actual: 6, maximum: 5)
https://docs.oracle.com/error-help/db/ora-12899/
    Error en la Fila Excel: '5' Error de Oracle: '12899'
    Valor: 芦󠄀2345
    Mensaje: ORA-12899: value too large for column "C##USUARIOORACLE"."Tabla Truncar Cadenas"."Char 5" (actual: 6, maximum: 5)
https://docs.oracle.com/error-help/db/ora-12899/
    Error en la Fila Excel: '7' Error de Oracle: '12899'
    Valor: 12.345
    Mensaje: ORA-12899: value too large for column "C##USUARIOORACLE"."Tabla Truncar Cadenas"."Char 5" (actual: 6, maximum: 5)
https://docs.oracle.com/error-help/db/ora-12899/
    Error en la Fila Excel: '9' Error de Oracle: '12899'
    Valor: 👨‍👩‍👧‍👦2345
    Mensaje: ORA-12899: value too large for column "C##USUARIOORACLE"."Tabla Truncar Cadenas"."Char 5" (actual: 11, maximum: 5)
https://docs.oracle.com/error-help/db/ora-12899/
Configuración 'Oracle_Net_Array': Carga Finalizada. Carga Incompleta.


Conexiones OLE DB (Oracle® Provider for OLE DB)

Fila: 1
Comando: INSERT INTO "Tabla Truncar Cadenas" ("Char 5", "DRIVER", "PROVIDER") VALUES (?, ?, ?)
Comando Select: SELECT "Char 5", "DRIVER", "PROVIDER" FROM "Tabla Truncar Cadenas"
Excepción:
{
  "$id": "1",
  "$type": "System.Data.OleDb.OleDbException, System.Data",
  "ErrorCode": -2147217833,
  "Errors": {
    "$type": "System.Data.OleDb.OleDbErrorCollection, System.Data",
    "$values": [
      {
        "$id": "2",
        "$type": "System.Data.OleDb.OleDbError, System.Data",
        "Message": "ORA-12899: value too large for column \"C##USUARIOORACLE\".\"Tabla Truncar Cadenas\".\"Char 5\" (actual: 6, maximum: 5)",
        "NativeError": 0,
        "Source": "OraOLEDB",
        "SQLState": ""
      }
    ]
  },
  "Message": "ORA-12899: value too large for column \"C##USUARIOORACLE\".\"Tabla Truncar Cadenas\".\"Char 5\" (actual: 6, maximum: 5)",
  "Data": {
    "$type": "System.Collections.ListDictionaryInternal, mscorlib"
  },
  "InnerException": null,
  "HelpLink": null,
  "Source": "OraOLEDB",
  "HResult": -2147217833
}

    Columna: Char 5    Valor: 123456
    Columna: DRIVER    Valor: OraOLEDB.Oracle
    Columna: PROVIDER    Valor: OLE DB
Se ha producido una excepción al intentar cargar la Tabla 'Tabla Truncar Cadenas'. Error en la Fila: 1
    Query que indica las columnas utilizadas de la Tabla:
    SELECT "Char 5", "DRIVER", "PROVIDER" FROM "Tabla Truncar Cadenas"
{
  "$id": "1",
  "$type": "System.Data.OleDb.OleDbException, System.Data",
  "ErrorCode": -2147217833,
  "Errors": {
    "$type": "System.Data.OleDb.OleDbErrorCollection, System.Data",
    "$values": [
      {
        "$id": "2",
        "$type": "System.Data.OleDb.OleDbError, System.Data",
        "Message": "ORA-12899: value too large for column \"C##USUARIOORACLE\".\"Tabla Truncar Cadenas\".\"Char 5\" (actual: 6, maximum: 5)",
        "NativeError": 0,
        "Source": "OraOLEDB",
        "SQLState": ""
      }
    ]
  },
  "Message": "ORA-12899: value too large for column \"C##USUARIOORACLE\".\"Tabla Truncar Cadenas\".\"Char 5\" (actual: 6, maximum: 5)",
  "Data": {
    "$type": "System.Collections.ListDictionaryInternal, mscorlib"
  },
  "InnerException": null,
  "HelpLink": null,
  "Source": "OraOLEDB",
  "HResult": -2147217833
}

Nº Filas insertadas: 0


Conexiones ODBC (Oracle ODBC Driver)

Fila: 1
Comando: INSERT INTO "Tabla Truncar Cadenas" ("Char 5", "DRIVER", "PROVIDER") VALUES (?, ?, ?)
Comando Select: SELECT "Char 5", "DRIVER", "PROVIDER" FROM "Tabla Truncar Cadenas"
Excepción:
{
  "$id": "1",
  "$type": "System.Data.Odbc.OdbcException, System.Data",
  "Errors": {
    "$type": "System.Data.Odbc.OdbcErrorCollection, System.Data",
    "$values": [
      {
        "$id": "2",
        "$type": "System.Data.Odbc.OdbcError, System.Data",
        "Message": "[Oracle][ODBC][Ora]ORA-12899: value too large for column \"C##USUARIOORACLE\".\"Tabla Truncar Cadenas\".\"Char 5\" (actual: 6, maximum: 5)\n",
        "SQLState": "HY000",
        "NativeError": 12899,
        "Source": "SQORA32.DLL"
      }
    ]
  },
  "Source": "SQORA32.DLL",
  "ErrorCode": -2146232009,
  "Message": "ERROR [HY000] [Oracle][ODBC][Ora]ORA-12899: value too large for column \"C##USUARIOORACLE\".\"Tabla Truncar Cadenas\".\"Char 5\" (actual: 6, maximum: 5)\n",
  "Data": {
    "$type": "System.Collections.ListDictionaryInternal, mscorlib"
  },
  "InnerException": null,
  "HelpLink": null,
  "HResult": -2146232009
}

    Columna: Char 5    Valor: 123456
    Columna: DRIVER    Valor: {Oracle en OraDB21Home1}
    Columna: PROVIDER    Valor: ODBC
Se ha producido una excepción al intentar cargar la Tabla 'Tabla Truncar Cadenas'. Error en la Fila: 1
    Query que indica las columnas utilizadas de la Tabla:
    SELECT "Char 5", "DRIVER", "PROVIDER" FROM "Tabla Truncar Cadenas"
{
  "$id": "1",
  "$type": "System.Data.Odbc.OdbcException, System.Data",
  "Errors": {
    "$type": "System.Data.Odbc.OdbcErrorCollection, System.Data",
    "$values": [
      {
        "$id": "2",
        "$type": "System.Data.Odbc.OdbcError, System.Data",
        "Message": "[Oracle][ODBC][Ora]ORA-12899: value too large for column \"C##USUARIOORACLE\".\"Tabla Truncar Cadenas\".\"Char 5\" (actual: 6, maximum: 5)\n",
        "SQLState": "HY000",
        "NativeError": 12899,
        "Source": "SQORA32.DLL"
      }
    ]
  },
  "Source": "SQORA32.DLL",
  "ErrorCode": -2146232009,
  "Message": "ERROR [HY000] [Oracle][ODBC][Ora]ORA-12899: value too large for column \"C##USUARIOORACLE\".\"Tabla Truncar Cadenas\".\"Char 5\" (actual: 6, maximum: 5)\n",
  "Data": {
    "$type": "System.Collections.ListDictionaryInternal, mscorlib"
  },
  "InnerException": null,
  "HelpLink": null,
  "HResult": -2146232009
}

Nº Filas insertadas: 0

Marcando la opción "Truncar Cadenas" en Excel To Database se truncarán las cadenas de caracteres teniendo en cuenta la capacidad máxima de caracteres permitidos como de bytes permitidos por el campo. Así, al cargar los datos indicados anteriormente, en el Panel de Resultados se obtienen los siguientes mensajes, donde se puede observar que la cadena es recortada para que cumpla el criterio mas restrictivo.

Celda: A9, Valor: 👨‍👩‍👧‍👦2345, Tabla: Tabla Truncar Cadenas, Columna: Char 5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 20
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👨‍👩‍👧

Celda: B9, Valor: 👨‍👩‍👧‍👦2345, Tabla: Tabla Truncar Cadenas, Columna: Char 5 BYTE, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👨?  

Celda: C9, Valor: 👨‍👩‍👧‍👦2345, Tabla: Tabla Truncar Cadenas, Columna: VarChar 5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👨?

Celda: D9, Valor: 👨‍👩‍👧‍👦2345, Tabla: Tabla Truncar Cadenas, Columna: VarChar2 5 Invisible, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 20
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👨‍👩‍👧

Celda: E9, Valor: 👨‍👩‍👧‍👦2345, Tabla: Tabla Truncar Cadenas, Columna: VarChar2 5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 20
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👨‍👩‍👧

Celda: F9, Valor: 👨‍👩‍👧‍👦2345, Tabla: Tabla Truncar Cadenas, Columna: VarChar2 5 BYTE, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 5
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👨?

Celda: G9, Valor: 👨‍👩‍👧‍👦2345, Tabla: Tabla Truncar Cadenas, Columna: NChar 5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👨‍👩

Celda: H9, Valor: 👨‍👩‍👧‍👦2345, Tabla: Tabla Truncar Cadenas, Columna: NVarChar2 5, Nº Máx caracteres permitidos: 5, Nº Máx bytes permitidos: 10
    Opción "Truncar Cadenas" marcada.
    Valor Truncado: 👨‍👩

En la figura siguiente se muestra parcialmente el resultado de la carga de datos:

Oracle: Bug Unicode BulkCopy - 1

Oracle: Bug Unicode BulkCopy - 1

Como se puede observer, a pesar de que se intentan insertar los valores "👨‍👩‍👧" y "👨👩👧👦5" en las columnas "Char 5" y "Varchar2 5", en la base de datos aparecen los valores "👨‍👩" y "👨👩�" cuando se utiliza .NET Connections (Managed Driver (Bulk Copy) (CheckBox "Usar Arrays" no marcado)). Con el resto de drivers y proveedores se insertan los valores correctos.

También se puede observar en la figura siguiente el volcado de la columna "Char 5". Dicho driver no rellena el campo correctamente.

Oracle: Bug Unicode BulkCopy - 2

Oracle: Bug Unicode BulkCopy - 2

Preguntas Frecuentes

¿Cómo evitar que la carga se detenga por un error de longitud?

Puedes activar la opción de 'Truncar Cadenas'. El software cortará automáticamente las cadenas que excedan el límite, permitiendo que el resto de la carga continúe sin errores.

¿Por qué es mejor la validación previa que dejarlo al Driver?

Los drivers suelen abortar toda la transacción ante un solo error de truncado. Nuestra validación previa permite identificar el problema fila por fila antes de comprometer la carga.

¿Por qué hay diferencias entre los drivers al truncar?

Porque cada motor (SQL Server, Oracle, Access) y cada driver gestionan el desbordamiento de forma distinta. Excel To Database ofrece estas opciones para unificar ese comportamiento y que el usuario tenga el control, no el driver.