Configurar o cambiar la intercalación de base de datos
Se aplica a: SQL Server
Azure SQL Managed Instance
En este artículo se describe cómo establecer o cambiar la intercalación de base de datos usando SQL Server Management Studio (SSMS) o Transact-SQL. Si no se especifica ninguna intercalación, se utiliza la del servidor.
Limitaciones y restricciones
Las intercalaciones exclusivas de Unicode de Windows solo se pueden usar con la cláusula COLLATE para aplicar intercalaciones a los tipos de datos nchar, nvarchar y ntext de nivel de columna y de nivel de datos de expresión. No se pueden utilizar con la cláusula COLLATE para cambiar la intercalación de una instancia de base de datos o de servidor.
Si la intercalación especificada o la intercalación que usa el objeto al que se hace referencia utiliza una página de códigos no admitida en Windows, el Motor de base de datos muestra un error.
La intercalación de nivel de servidor en Instancia administrada de Azure SQL se puede especificar al crear la instancia y no se puede cambiar posteriormente. Obtenga más información en Configuración o cambio de la intercalación del servidor.
Importante
La instrucción ALTER DATABASE COLLATE
no se admite en Azure SQL Database. Especifica la intercalación de base de datos y la intercalación de catálogo en el momento de CREATE DATABASE.
Recomendaciones
Puede encontrar los nombres de intercalación admitidos en Nombre de intercalación de Windows (Transact-SQL) y Nombre de intercalación de SQL Server (Transact-SQL), o bien puede usar la función del sistema sys.fn_helpcollations (Transact-SQL).
Al modificar la intercalación de la base de datos también se cambian los siguientes elementos:
Todas las columnas char, varchar, text, nchar, nvarcharo ntext de las tablas del sistema se cambian a la nueva intercalación.
Todos los valores devueltos escalares y parámetros char, varchar, text, nchar, nvarcharo ntext existentes para los procedimientos almacenados y las funciones definidas por el usuario se cambian a la nueva intercalación.
Los tipos de datos del sistema char, varchar, text, nchar, nvarcharo ntext y todos los tipos de datos definidos por el usuario basados en estos tipos de datos del sistema se cambian a la nueva intercalación predeterminada.
Para cambiar la intercalación de cualquier objeto nuevo creado en una base de datos de usuario, utilice la cláusula COLLATE
de la instrucción ALTER DATABASE. Esta instrucción no modifica la intercalación de las columnas de ninguna de las tablas definidas por el usuario existentes. Para modificarlas, use la cláusula COLLATE
de ALTER TABLE.
Importante
El hecho de cambiar la intercalación de una base de datos o columnas individuales no modifica los datos subyacentes ya almacenados en tablas existentes. A menos que la aplicación controle explícitamente la conversión de datos y la comparación entre las distintas intercalaciones, se recomienda trasladar los datos existentes en la base de datos a la última intercalación. Esto elimina el riesgo de que las aplicaciones puedan modificar incorrectamente los datos, lo que puede causar resultados erróneos o una pérdida de datos silenciosa.
Si se cambia una intercalación de base de datos, solo las tablas nuevas heredarán la última intercalación de base de datos de forma predeterminada. Hay varias alternativas para convertir los datos existentes de la última intercalación:
Convierta los datos en contexto. Para convertir la intercalación de una columna en una tabla existente, consulte Establecer o cambiar la intercalación de columnas. Es fácil implementar esta operación, pero puede convertirse en un problema de bloqueo en el caso de las tablas grandes y las aplicaciones ocupadas. Vea el ejemplo siguiente de una conversión en contexto de la columna
MyString
en una nueva intercalación:ALTER TABLE dbo.MyTable ALTER COLUMN MyString VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8;
Copie datos en tablas nuevas que utilicen la última intercalación y reemplace las tablas originales de la misma base de datos. Cree una nueva tabla en la base de datos actual que herede la intercalación de la base de datos y copie los datos entre la tabla anterior y la nueva. Ahora, quite la tabla original y cambie el nombre de la nueva por el nombre de la original. Esta operación es más rápida que una conversión en contexto, pero puede convertirse en un desafío al administrar esquemas complejos con dependencias como las restricciones de claves externas, las restricciones de claves principales y los desencadenadores. En caso de que las aplicaciones sigan cambiando los datos, también requeriría una sincronización de datos final entre la tabla original y la nueva antes del último cierre. Vea el ejemplo siguiente de una conversión de "copiar y reemplazar" de la columna
MyString
en una nueva intercalación:CREATE TABLE dbo.MyTable2 (MyString VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8); INSERT INTO dbo.MyTable2 SELECT * FROM dbo.MyTable; DROP TABLE dbo.MyTable; EXEC sp_rename 'dbo.MyTable2', 'dbo.MyTable';
Copie los datos en una nueva base de datos que use la última intercalación y reemplace la base de datos original. Crea una nueva base de datos con la nueva intercalación y transfiere los datos de la base de datos original por medio de herramientas como servicios de integración o el asistente para importación y exportación de SQL Server Management Studio. Este es un enfoque más sencillo en el caso de esquemas complejos. En caso de que las aplicaciones sigan cambiando los datos, también requeriría una sincronización de datos final entre la tabla original y la nueva base de datos antes del último cierre.
Permisos
Para crear una base de datos, requiere el permiso CREATE DATABASE
en la base de datos master
, o bien requiere el permiso CREATE ANY DATABASE
o ALTER ANY DATABASE
.
Para cambiar la intercalación de una base de datos existente, requiere el permiso ALTER
en la base de datos.
Establecer o cambiar la intercalación de base de datos mediante SSMS
En el Explorador de objetos, conéctese a una instancia del Motor de base de datos de SQL Server, expándala y, después, expanda Bases de datos.
Si está creando una base de datos, haga clic con el botón derecho en Bases de datos y seleccione Nueva base de datos. Si no quiere la intercalación predeterminada, seleccione la página Opciones y elija una intercalación en la lista desplegable Intercalación.
Como alternativa, si la base de datos ya existe, haga clic con el botón derecho en la base de datos que quiera y seleccione Propiedades. Seleccione la página Opciones y, después, seleccione una intercalación en la lista desplegable Intercalación.
Después de terminar, seleccione Aceptar.
Establecer la intercalación de base de datos mediante Transact-SQL
Conéctese con el Motor de base de datos.
En la barra Estándar, seleccione Nueva consulta.
Copie y pegue el ejemplo siguiente en la ventana de consulta y seleccione Ejecutar. En este ejemplo se muestra cómo usar la cláusula COLLATE en CREATE DATABASE para especificar un nombre de intercalación. En el ejemplo de crea la base de datos
MyOptionsTest
que utiliza la intercalaciónLatin1_General_100_CS_AS_SC
. Después de crear la base de datos, ejecute la instrucciónSELECT
para comprobar la configuración.
USE master;
GO
IF DB_ID (N'MyOptionsTest') IS NOT NULL
DROP DATABASE MyOptionsTest;
GO
CREATE DATABASE MyOptionsTest
COLLATE Latin1_General_100_CS_AS_SC;
GO
SELECT name, collation_name
FROM sys.databases
WHERE name = N'MyOptionsTest';
GO
Cambiar la intercalación de base de datos mediante Transact-SQL
Conéctese con el Motor de base de datos.
En la barra Estándar, seleccione Nueva consulta.
Copie y pegue el ejemplo siguiente en la ventana de consulta y seleccione Ejecutar. En este ejemplo se muestra cómo usar la cláusula COLLATE en una instrucción ALTER DATABASE para cambiar el nombre de la intercalación. Ejecute la instrucción
SELECT
para comprobar el cambio.
USE master;
GO
ALTER DATABASE MyOptionsTest
COLLATE French_CI_AS ;
GO
SELECT name, collation_name
FROM sys.databases
WHERE name = N'MyOptionsTest';
GO
Pasos siguientes
Obtenga más información acerca de la intercalación:
- Compatibilidad con la intercalación y Unicode
- sys.fn_helpcollations (Transact-SQL)
- sys.databases (Transact-SQL)
- Nombre de intercalación de SQL Server (Transact-SQL)
- Nombre de intercalación de Windows (Transact-SQL)
- COLLATE (Transact-SQL)
- Prioridad de intercalación (Transact-SQL)
- CREATE TABLE (Transact-SQL)
- CREATE DATABASE (Transact-SQL de SQL Server)
- ALTER TABLE (Transact-SQL)
- ALTER DATABASE (Transact-SQL)