sql server - modify - ¿Qué hace ''COLLATE SQL_Latin1_General_CP1_CI_AS''?
sql server collation (5)
El CP1 significa ''Código de la página 1'' - técnicamente esto se traduce en la página de códigos 1252
Tengo una consulta SQL para crear la base de datos en SQLServer como se indica a continuación:
create database yourdb
on
( name = ''yourdb_dat'',
filename = ''c:/program files/microsoft sql server/mssql.1/mssql/data/yourdbdat.mdf'',
size = 25mb,
maxsize = 1500mb,
filegrowth = 10mb )
log on
( name = ''yourdb_log'',
filename = ''c:/program files/microsoft sql server/mssql.1/mssql/data/yourdblog.ldf'',
size = 7mb,
maxsize = 375mb,
filegrowth = 10mb )
COLLATE SQL_Latin1_General_CP1_CI_AS;
go
Funciona bien
Mientras que el resto del SQL es claro, estoy bastante confundido acerca de la funcionalidad de COLLATE SQL_Latin1_General_CP1_CI_AS
.
¿Puede alguien explicarme esto? Además, me gustaría saber si la creación de la base de datos de esta manera es una mejor práctica.
Establece cómo se ordena el servidor de la base de datos. 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 ascii -
CP1
significa Código Página 1252 - Comparaciones insensibles a mayúsculas / minúsculas de modo que ''ABC'' sería igual a ''abc''
-
AS
acento sensible, entonces ''ü'' no es igual a ''u''
PD: para obtener información más detallada, asegúrese de leer la respuesta de @solomon-rutzky .
Esto especifica la intercalación predeterminada para la base de datos. Cada campo de texto que cree en tablas en la base de datos usará esa intercalación, a menos que especifique una diferente.
Una base de datos siempre tiene una intercalación predeterminada. Si no especifica ninguno, se utiliza la intercalación predeterminada de la instancia de SQL Server.
El nombre de la intercalación que utiliza muestra que utiliza la página de códigos Latin1 1, no distingue mayúsculas de minúsculas (CI) y es sensible a acentos (AS). Esta intercalación se usa en EE. UU., Por lo que contendrá reglas de clasificación que se utilizan en EE. UU.
La intercalación decide cómo se comparan los valores de texto para la igualdad y la semejanza, y cómo se comparan al ordenar. La página de códigos se usa cuando se almacenan datos no unicode, por ejemplo, campos varchar.
La palabra clave COLLATE especifica qué tipo de conjunto de caracteres y reglas (orden, reglas de confrontación) está utilizando para los valores de cadena.
Por ejemplo, en su caso, está utilizando reglas latinas con mayúsculas y minúsculas ( CI ) y acentos sensibles ( AS )
Puede consultar esta Documentation
Tenga en cuenta que la respuesta aceptada es un poco incompleta. Sí, en el nivel más básico, la intercalación maneja la clasificación. PERO, las reglas de comparación definidas por la Clasificación elegida se utilizan en muchos lugares fuera de las consultas de los usuarios contra los datos del usuario.
La COLLATE {collation_name}
de la instrucción CREATE DATABASE
especifica la COLLATE {collation_name}
predeterminada de la base de datos , y no el servidor; Las colaciones predeterminadas a nivel de base de datos y de nivel de servidor controlan cosas diferentes.
Controles de nivel del servidor (es decir, instancia) :
- Colación a nivel de base de datos para bases de datos del sistema:
master
,model
,msdb
ytempdb
. - Debido al control de la intercalación de
tempdb
de nivel de base de datos, es la intercalación predeterminada para las columnas de cadena en tablas temporales (globales y locales), pero no las variables de tabla. - Debido al control de la intercalación del nivel de DB del
master
, es entonces la intercalación utilizada para los datos del nivel del servidor , como los nombres de las bases de datos (es decir, la columna dename
ensys.databases
), nombres de inicio de sesión, etc. - Manejo de nombres de parámetros / variables
- Manejo de nombres de cursor
- Manejo de etiquetas
GOTO
-
COLLATE
predeterminada utilizada para las Bases de datos recién creadas cuando falta la cláusulaCOLLATE
Controles de nivel de base de datos :
- La intercalación predeterminada se utiliza para las columnas de cadenas recién creadas (
CHAR
,VARCHAR
,NCHAR
,NVARCHAR
,TEXT
yNTEXT
, pero no utilizaTEXT
oNTEXT
) cuando la cláusulaCOLLATE
falta en la definición de la columna. Esto seALTER TABLE ... ADD
instruccionesCREATE TABLE
yALTER TABLE ... ADD
. - Intercalación predeterminada utilizada para literales de cadena (es decir,
''some text''
) y variables de cadena (es decir,@StringVariable
). Esta intercalación solo se usa cuando se comparan cadenas y variables con otras cadenas y variables. Al comparar cadenas / variables a columnas, se usará la intercalación de la columna. - La intercalación utilizada para los metadatos a nivel de base de datos, como los nombres de los objetos (es decir,
sys.objects
), los nombres de las columnas (es decir,sys.columns
), los nombres de los índices (es decir,sys.indexes
), etc. - La intercalación utilizada para los objetos de nivel de base de datos : tablas, columnas, índices, etc.
También:
- Las
SQL_
comienzan conSQL_
son las antiguas (y definitivamente obsoletas, aunque no oficialmente desaprobadas) de las colaciones específicas de SQL Server (creadas antes de que SQL Server pudiera hacer uso de las intercalaciones de nivel de sistema operativo). - Todas las demás colaciones son intercalaciones de Windows y deben ser las que se utilizan.
- ASCII es una codificación que es de 8 bits (para uso común; técnicamente "ASCII" es de 7 bits con los caracteres 0 - 127, y "ASCII extendido" es de 8 bits con los caracteres 0 - 255)
-
Latin1
refiere la cultura / localidad que determina:- Página de códigos para datos
CHAR
,VARCHAR
yTEXT
(columnas, literales y variables). La página de códigos es la parte "extendida" de ASCII extendido, y controla qué caracteres se usan para los valores de 128 a 255. - Las reglas por las cuales los personajes son ordenados y comparados. Esto cubre los datos de
VARCHAR
yNVARCHAR
(es decir, Unicode).
- Página de códigos para datos