enero 28, 2022

{codificación} Vista

Cuando desarrolla una aplicación o escribe un código en el sistema de base de datos SQL, es crucial comprender cómo se ordenarán y compararán los datos. Puede almacenar sus datos en un idioma específico, o puede querer que SQL Server trate los datos que distinguen entre mayúsculas y minúsculas por separado. Microsoft ha proporcionado una configuración de SQL Server llamada Intercalación para controlar y abordar dichos requisitos.

¿Qué es la intercalación en SQL Server?

Podemos establecer la intercalación en varios niveles en SQL Server como se indica a continuación.

  • Nivel de servidor
  • Nivel de base de datos
  • Nivel de columna
  • Nivel de expresión

La intercalación a nivel de servidor a veces se puede llamar intercalación a nivel de instancia de SQL Server.

La intercalación a nivel de base de datos se heredará de la configuración de intercalación a nivel de servidor si no elige ninguna intercalación específica durante la creación de la base de datos. También puede cambiar la intercalación a nivel de base de datos más adelante. Tenga en cuenta que el cambio de intercalación de base de datos solo se aplicará a los objetos próximos o nuevos que se creen después del cambio de intercalación.

La nueva intercalación no modificará los datos existentes almacenados en tablas que se ordenaron con el último tipo de intercalación. El equipo de aplicaciones necesita más planificación para manejar esta conversión de datos almacenados debido a la nueva configuración de intercalación.

Hay varias maneras de hacerlo. Una es copiar los datos de la tabla existente a una nueva tabla creada con la nueva intercalación y luego reemplazar la tabla antigua por la nueva. También puede mover los datos de la tabla a una nueva base de datos mediante una nueva intercalación y reemplazar la base de datos antigua por la nueva.

NOTA: Cambiar la intercalación es una tarea compleja y debe evitarla a menos que tenga un caso de negocio obligatorio.

¿Cómo Encontrar y Cambiar la recopilación de bases de datos en SQL Server?

Sigamos adelante y comprobemos la intercalación de la instancia de SQL Server y todas las bases de datos alojadas en esa instancia. Puede verificar la intercalación accediendo a la ventana de propiedades de nivel de instancia o de base de datos mediante SQL Server Management Studio o simplemente ejecutando la siguiente instrucción T-SQL. La intercalación de cada base de datos se almacena en el objeto system sys.bases de datos: accederemos a ellas para obtener esta información.

--Check Database CollationSELECT name, collation_name FROM sys.databases GO --Check Server or Instance level CollationSELECT SERVERPROPERTY('Collation') As 

He ejecutado la instrucción T-SQL anterior y obtuve la siguiente salida. Podemos ver que todas las bases de datos y la intercalación a nivel de servidor tienen la misma configuración que SQL_Latin1_General_CP1_CI_AS. Significa que las intercalaciones de base de datos han sido heredadas por la intercalación a nivel de servidor mientras se crean, y el valor predeterminado no se ha cambiado.

Salida de la ejecución de la instrucción T-SQL

Ahora, permítanme mostrarles cómo verificar la intercalación de bases de datos utilizando la interfaz gráfica de usuario en SQL Server Management Studio.

En primer lugar, conéctese a su instancia de SQL Server mediante SQL Server Management Studio. Expanda el nodo de instancia seguido de la carpeta Bases de datos. Haga clic con el botón derecho en la base de datos de destino y elija Propiedades:

elegir propiedades en la base de datos de destino

Obtendrá la siguiente ventana de Propiedades de la base de datos.

Ahora haga clic en la pestaña Opciones del panel lateral izquierdo. Obtendrá múltiples configuraciones de propiedades en el panel derecho. La intercalación es la primera propiedad de esta página, puede ver que es la misma que en el script T – SQL anterior.

Del mismo modo, puede hacer clic en el nodo de instancia de SQL Server y hacer clic con el botón secundario en las propiedades de nivel de instancia para ver la intercalación a nivel de servidor.

intercalación a nivel de servidor

Si desea cambiar esta intercalación a una nueva intercalación, solo tiene que hacer clic en el menú desplegable Intercalación y elegir la opción que necesita. Asegúrese de haber hecho una copia de seguridad completa de su base de datos antes de hacerlo.

cambiar la intercalación a una nueva

He elegido una intercalación similar con SQL_Latin1_General_CP1_CS_AS sensible a mayúsculas y minúsculas para esta base de datos y he hecho clic en Aceptar para aplicarla. Nota: Asegúrese de que nadie esté conectado a la base de datos de destino durante este procedimiento, de lo contrario, tendrá que cambiar el modo a un solo usuario y cambiar esta configuración.

Propiedades de la base de datos

También puede cambiar esta intercalación de base de datos mediante la instrucción T-SQL. Para ello, utilice la cláusula COLLATE de la instrucción ALTER DATABASE.

En primer lugar, hemos cambiado la base de datos al modo de un solo usuario, luego cambiamos la intercalación y, finalmente, movimos la base de datos al modo multiusuario.

--Change Database Collation using T-SQL USE master; GO Alter DATABASE SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS; GOAlter DATABASE SET MULTI_USER

Enumere todas las intercalaciones compatibles en SQL Server

Esta sección le mostrará cómo encontrar todas las intercalaciones disponibles en SQL Server. En primer lugar, déjeme mostrarle cómo obtener la lista de todas las intercalaciones compatibles para la instancia de SQL Server.

SQL Server tiene una función de sistema llamada fn_helpcollations () que puede usar para obtener todas las intercalaciones.

Ejecute el siguiente comando para mostrar la lista.

--Display the list of all collations SELECT name, description FROM fn_helpcollations()

Podemos ver todas las intercalaciones compatibles con 5508 en la sección de salida. Si no está seguro de qué intercalación elegir, puede usar la cláusula WHERE en el siguiente script para filtrar todas las intercalaciones posibles que se pueden establecer en la base de datos.

todas las intercalaciones soportadas

Supongamos que necesita almacenar sus datos en el idioma inglés de EE.UU. y desea que SQL Server los maneje en un formato que distingue entre mayúsculas y minúsculas. Puede usar el siguiente comando para obtener la lista de intercalaciones posibles y compatibles para su consulta:

--Display the list of all collations with WHERE clause SELECT Name, Description FROM fn_helpcollations() WHERE Name like 'SQL_Latin1%' AND Description LIKE '%case-sensitive%'

La salida muestra solo 10 intercalaciones que satisfacen su consulta. Puede usar el script anterior para filtrar varias intercalaciones.

filtrar las intercalaciones

Impacto del cambio de la Intercalación de bases de datos en la Salida de la consulta

En esta sección, le mostraré la diferencia entre las dos salidas de la misma consulta cuando se ejecutan con diferentes intercalaciones.

Primero, crearé una base de datos llamada MSSQL con una intercalación (SQL_Latin1_General_CP1_CS_AS). Luego ejecutaré la misma consulta dos veces para obtener la salida. Más tarde, cambiaré la intercalación a SQL_Latin1_General_CP1_CI_AS y volveré a ejecutar las mismas consultas para obtener su salida. Puede comparar ambos resultados y comprender el impacto de cambiar la recopilación de una base de datos. Entonces, comencemos con la creación de bases de datos.

Inicie la ventana de creación de nueva base de datos como se muestra en la imagen de abajo. También puede crear esta base de datos utilizando T-SQL. Después de eso, puede ver el nombre de la base de datos y sus archivos de datos. Ahora, haga clic en la segunda pestaña en el panel lateral izquierdo para cambiar a la ventana de propiedades de intercalación.

lanzamiento de una nueva ventana de creación de base de datos

Puede ver que el nombre de intercalación para esta base de datos es el predeterminado. Significa que esta base de datos heredará la intercalación del tipo de intercalación a nivel de servidor. Haz clic en el menú desplegable Intercalación para elegir tu nueva intercalación.

elección de un nuevo cotejo

He seleccionado la siguiente intercalación SQL_Latin1_General_CP1_CS_AS para esta base de datos, no la predeterminada. Haga clic en Aceptar para continuar con la creación de la base de datos.

elección de un nuevo cotejo

Ahora, compruebe la intercalación de la base de datos para una base de datos recién creada. Podemos ver que es sql_latin1_general_cp1_cs_ como hemos seleccionado en el paso anterior.

comprobación de la intercalación de la base de datos para la base de datos recién creada

En SQL_Latin1_General_CP1_CS_AS, CS significa el modo que distingue entre mayúsculas y minúsculas, y CI significa el modo que no distingue entre mayúsculas y minúsculas. Ahora puede ejecutar el siguiente código T-SQL o cualquier código para obtener la salida.

He ejecutado el mismo comando dos veces. El primer script filtra los nombres de las columnas con un valor SYS en mayúsculas, mientras que el segundo script filtrará la misma columna con el mismo valor sys en minúsculas. La sección de resultados muestra que el primer script no ha mostrado ningún resultado, mientras que el segundo script ha mostrado el resultado debido a su comportamiento sensible a mayúsculas y minúsculas.

Select * from sysusersWhere name='SYS'GoSelect * from sysusersWhere name='sys'GO
Impacto de la Modificación de la Recopilación de Bases de Datos en la Salida de Consultas

Ahora, cambiaremos la intercalación de esta base de datos a la intercalación insensible a mayúsculas y minúsculas SQL_Latin1_General_CP1_CI_AS ejecutando las instrucciones T-SQL siguientes. También puede cambiarlo a través de la interfaz gráfica de usuario accediendo a la ventana Propiedades de la base de datos en SQL Server Management Studio.

--Change database collation to SQL_Latin1_General_CP1_CI_ASUSE master; GO Alter DATABASE SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS; GOAlter DATABASE SET MULTI_USER

He ejecutado el script anterior de una sola vez, y la intercalación de la base de datos se cambió con éxito a una nueva intercalación que no distingue mayúsculas de minúsculas.

nueva intercalación con soporte insensible a mayúsculas y minúsculas

Puede verificar este cambio ejecutando los siguientes scripts para verificar la intercalación de la base de datos MSSQL recién creada. Podemos ver que la nueva intercalación está configurada para esta base de datos en la imagen de abajo.

se establece una nueva intercalación para la base de datos

Volveremos a ejecutar la misma instrucción T-SQL antes de cambiar la intercalación para ver el impacto de este cambio. Como podemos ver ahora, ambas sentencias T-SQL están en la salida.

Impacto de la Modificación de la Recopilación de Bases de Datos en la Salida de Consultas

Conclusión

Espero que sea evidente que la intercalación en SQL Server es crucial. Hemos definido el impacto que tiene si realiza cambios en la intercalación en cualquier nivel de SQL Server. Siempre haga la planificación adecuada y pruebe primero las modificaciones en su entorno de ciclo de vida inferior.

Manténgase atento a mi próximo artículo, donde le mostraré un método paso a paso para cambiar la intercalación a nivel de servidor.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.