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:
latin1
hace que el servidor trate cadenas usando charset latin 1, básicamente asciiCP1
representa la página de códigos 1252CI
comparaciones que no distinguen entre mayúsculas y minúsculas, por lo que ‘ABC’ sería igual a ‘abc’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
, ytempdb
. - 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 ensys.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 columnas
CHAR
,VARCHAR
,NCHAR
,NVARCHAR
,TEXT
, yNTEXT
– pero no usesTEXT
oNTEXT
) cuando elCOLLATE
Falta una cláusula en la definición de columna. Esto va para ambosCREATE TABLE
yALTER 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 decirsys.columns
), nombres de índice (es decirsys.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 inclusoNVARCHAR
) 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, lamentablementeSQL_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 entreVARCHAR
yNVARCHAR
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
, yNTEXT
datos esto determina las reglas lingüísticas utilizadas para clasificar y comparar. - Para
CHAR
,VARCHAR
, yTEXT
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.
- Para
-
CPcode_page
oversion
- 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ón80
(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 son90
(para SQL Server 2005, que es la versión 9.0), la mayoría son100
(para SQL Server 2008, versión 10.0), y un pequeño conjunto tiene140
(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
y100
intercalaciones, pero solo a partir de SQL Server 2012.
- Para servidor SQL colaciones:
- 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 oCI
= no distingue entre mayúsculas y minúsculasAS
= sensible al acento oAI
= insensible al acentoKS
= Kana sensible al tipo o ausente = Kana insensible al tipoWS
= sensible al ancho o faltante = insensible al anchoVSS
= 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 enVARCHAR
yCHAR
tipos de datos (pero no los obsoletosTEXT
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, utilizanVARCHAR
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 cualquieraVARCHAR
datos que no utilizan_UTF8
colaciones oNVARCHAR
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.