Saltar al contenido

¿Qué hace ‘COLLATE SQL_Latin1_General_CP1_CI_AS’?

Hola, hemos encontrado la respuesta a lo que buscas, desplázate y la obtendrás aquí.

Solución:

Establece cómo se clasifica el servidor de la base de datos (compara fragmentos de texto). en este caso:

SQL_Latin1_General_CP1_CI_AS

se divide en partes interesantes:

  1. latin1 hace que el servidor trate cadenas usando charset latin 1, básicamente ascii
  2. CP1 representa la página de códigos 1252
  3. CI comparaciones que no distinguen entre mayúsculas y minúsculas, por lo que ‘ABC’ sería igual a ‘abc’
  4. AS sensible al acento, entonces ‘ü’ no es igual a ‘u’

PD Para obtener información más detallada, asegúrese de leer la respuesta de @ solomon-rutzky.

Tenga en cuenta que la respuesta aceptada está un poco incompleta. Sí, en el nivel más básico, la clasificación maneja la clasificación. PERO, las reglas de comparación definidas por la intercalación elegida se utilizan en muchos lugares fuera de las consultas del usuario contra los datos del usuario.

Si “¿Qué COLLATE SQL_Latin1_General_CP1_CI_AS hacer? “significa” ¿Qué COLLATE cláusula de CREATE DATABASE hacer? “, entonces:

los COLLATE collation_name cláusula del CREATE DATABASE declaración especifica la intercalación predeterminada de la Base de datos, y no el servidor; Las intercalaciones predeterminadas a nivel de base de datos y a nivel de servidor controlan cosas diferentes.

Nivel de servidor (es decir, instancia) control S:

  • Intercalación a nivel de base de datos para bases de datos del sistema: master, model, msdb, y tempdb.
  • Debido al control de la intercalación a nivel de base de datos de tempdb, entonces es la intercalación predeterminada para string columnas en tablas temporales (globales y locales), pero no variables de tabla.
  • Debido al control de la intercalación a nivel de base de datos de master, entonces es la colación utilizada para Nivel de servidor datos, como nombres de bases de datos (es decir, name columna en sys.databases), Nombres de inicio de sesión, etc.
  • Manejo de nombres de parámetros / variables
  • Manejo de nombres de cursor
  • Manejo de GOTO etiquetas
  • Intercalación predeterminada utilizada para bases de datos recién creadas cuando el COLLATE falta la cláusula

Nivel de base de datos control S:

  • Intercalación predeterminada utilizada para los recién creados string columnasCHAR, VARCHAR, NCHAR, NVARCHAR, TEXT, y NTEXT – pero no uses TEXT o NTEXT) cuando el COLLATE Falta una cláusula en la definición de columna. Esto va para ambos CREATE TABLE y ALTER TABLE ... ADD declaraciones.
  • Intercalación predeterminada utilizada para string literales (es decir 'some text') y string variables (es decir @StringVariable). Esta intercalación solo se usa cuando se comparan cadenas y variables con otras cadenas y variables. Al comparar cadenas / variables con columnas, se utilizará la intercalación de la columna.
  • La colación utilizada para Nivel de base de datos metadatos, como nombres de objetos (es decir, sys.objects), nombres de columna (es decir sys.columns), nombres de índice (es decir sys.indexes), etc.
  • La colación utilizada para Nivel de base de datos objetos: tablas, columnas, índices, etc.

También:

  • ASCII es una codificación de 8 bits (para uso común; técnicamente, “ASCII” es de 7 bits con valores de caracteres de 0 a 127 y “ASCII extendido” es de 8 bits con valores de caracteres de 0 a 255). Este grupo es el mismo en todas las culturas.
  • La página de códigos es la parte “extendida” de ASCII extendido y controla qué caracteres se utilizan para los valores 128 – 255. Este grupo varía entre cada cultura.
  • Latin1 lo hace no significa “ASCII” ya que el ASCII estándar solo cubre los valores 0 – 127, y todos páginas de códigos (que se pueden representar en SQL Server, e incluso NVARCHAR) asignan esos mismos 128 valores a los mismos caracteres.

Si “¿Qué COLLATE SQL_Latin1_General_CP1_CI_AS hacer? “significa” ¿Qué hace esta colación en particular? “, luego:

  • Porque el nombre empieza con SQL_, esta es una intercalación de SQL Server, no una intercalación de Windows. Estos son definitivamente obsoletos, incluso si no están oficialmente obsoletos, y son principalmente para compatibilidad con versiones anteriores a SQL Server 2000. Aunque, lamentablemente SQL_Latin1_General_CP1_CI_AS es muy común debido a que es el predeterminado cuando se instala en un sistema operativo que usa el inglés de EE. UU. como idioma. Estas intercalaciones deben evitarse en la medida de lo posible.

    Intercalaciones de Windows (aquellas con nombres no empezando con SQL_) son más nuevos, más funcionales, tienen una clasificación consistente entre VARCHAR y NVARCHAR para los mismos valores, y se están actualizando con pesos de clasificación adicionales / corregidos y asignaciones de mayúsculas / minúsculas. Estas intercalaciones tampoco tienen el problema de rendimiento potencial que tienen las intercalaciones de SQL Server: Impacto en los índices al mezclar tipos VARCHAR y NVARCHAR.

  • Latin1_General es la cultura / configuración regional.
    • Para NCHAR, NVARCHAR, y NTEXT datos esto determina las reglas lingüísticas utilizadas para clasificar y comparar.
    • Para CHAR, VARCHAR, y TEXT datos (columnas, literales y variables) esto determina:
      • reglas lingüísticas utilizadas para clasificar y comparar.
      • página de códigos utilizada para codificar los caracteres. Por ejemplo, Latin1_General las intercalaciones utilizan la página de códigos 1252, Hebrew las intercalaciones utilizan la página de códigos 1255, y así sucesivamente.
  • CPcode_page o version

    • Para servidor SQL colaciones: CPcode_page, es la página de códigos de 8 bits que determina qué caracteres se asignan a los valores 128-255. Si bien hay cuatro páginas de códigos para Conjuntos de caracteres de doble byte (DBCS) que pueden usar combinaciones de 2 bytes para crear más de 256 caracteres, estas son no disponible para las intercalaciones de SQL Server.
    • Para Ventanas colaciones: version, aunque no está presente en todos los nombres de intercalación, se refiere a la versión de SQL Server en la que se introdujo la intercalación (en su mayor parte). Las intercalaciones de Windows sin número de versión en el nombre son versión 80 (es decir, SQL Server 2000 ya que es la versión 8.0). No todas las versiones de SQL Server vienen con nuevas intercalaciones, por lo que hay brechas en los números de versión. Hay algunos que son 90 (para SQL Server 2005, que es la versión 9.0), la mayoría son 100 (para SQL Server 2008, versión 10.0), y un pequeño conjunto tiene 140 (para SQL Server 2017, versión 14.0).

      Dije “en su mayor parte” porque las colaciones que terminan en _SC se introdujeron en SQL Server 2012 (versión 11.0), pero los datos subyacentes no eran nuevos, simplemente agregaron soporte para caracteres suplementarios para las funciones integradas. Entonces, esos finales existen para la versión. 90 y 100 intercalaciones, pero solo a partir de SQL Server 2012.

  • A continuación, tiene las sensibilidades, que pueden estar en cualquier combinación de las siguientes, pero siempre especificadas en este orden:
    • CS = distingue entre mayúsculas y minúsculas o CI = no distingue entre mayúsculas y minúsculas
    • AS = sensible al acento o AI = insensible al acento
    • KS = Kana sensible al tipo o ausente = Kana insensible al tipo
    • WS = sensible al ancho o faltante = insensible al ancho
    • VSS = selector de variación sensible (solo disponible en las intercalaciones de la versión 140) o faltante = selector de variación insensible
  • Última pieza opcional:

    • _SC al final significa “Soporte de caracteres suplementarios”. El “soporte” solo afecta la forma en que las funciones integradas interpretan los pares sustitutos (que es la forma en que se codifican los caracteres suplementarios en UTF-16). Sin _SC al final (o _140_ en el medio), las funciones integradas no ven un solo carácter suplementario, sino que ven dos puntos de código sin sentido que forman el par sustituto. Esta terminación se puede agregar a cualquier colación no binaria, versión 90 o 100.
    • _BIN o _BIN2 al final significa clasificación y comparación “binarias”. Los datos se almacenan igual, pero no hay reglas lingüísticas. Este final nunca se combina con ninguna de las 5 sensibilidades o _SC. _BIN es el estilo más antiguo, y _BIN2 es el estilo más nuevo y preciso. Si usa SQL Server 2005 o más reciente, use _BIN2. Para obtener detalles sobre las diferencias entre _BIN y _BIN2, consulte: Diferencias entre las diversas intercalaciones binarias (culturas, versiones y BIN frente a BIN2).
    • _UTF8 es una nueva opción a partir de SQL Server 2019. Es una codificación de 8 bits que permite almacenar datos Unicode en VARCHAR y CHAR tipos de datos (pero no los obsoletos TEXT tipo de datos). Esta opción solo se puede utilizar en intercalaciones que admitan caracteres suplementarios (es decir, intercalaciones de la versión 90 o 100 con _SC en su nombre y colaciones de la versión 140). También hay un solo binario _UTF8 colación_BIN2, no _BIN).

      TENGA EN CUENTA: UTF-8 fue diseñado / creado para ser compatible con entornos / código que están configurados para codificaciones de 8 bits pero que desean admitir Unicode. Aunque hay algunos escenarios en los que UTF-8 puede proporcionar hasta un 50% de ahorro de espacio en comparación con NVARCHAR, eso es un efecto secundario y tiene el costo de un ligero impacto en el rendimiento en muchas / la mayoría de las operaciones. Si necesita esto por compatibilidad, entonces el costo es aceptable. Si desea esto para ahorrar espacio, es mejor que pruebe y PRUEBE DE NUEVO. Las pruebas incluyen toda la funcionalidad y más que unas pocas filas de datos. Tenga en cuenta que las intercalaciones UTF-8 funcionan mejor cuando TODAS las columnas, y la propia base de datos, utilizan VARCHAR datos (columnas, variables, string literales) con un _UTF8 colación. Este es el estado natural para cualquiera que use esto por compatibilidad, pero no para aquellos que esperan usarlo para ahorrar espacio. Tenga cuidado al mezclar datos VARCHAR usando un _UTF8 colación con cualquiera VARCHAR datos que no utilizan_UTF8 colaciones o NVARCHAR datos, ya que puede experimentar un comportamiento extraño / pérdida de datos. Para obtener más detalles sobre las nuevas intercalaciones UTF-8, consulte: Compatibilidad nativa con UTF-8 en SQL Server 2019: ¿Salvador o falso profeta?

El CP1 significa ‘Página de códigos 1’; técnicamente, esto se traduce en la página de códigos 1252

Reseñas y puntuaciones

Puedes secundar nuestra faena escribiendo un comentario y dejando una valoración te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *