/ / Какво прави 'COLLATE SQL_Latin1_General_CP1_CI_AS'? - sql-server, database, tsql, collation

Какво прави "COLLATE SQL_Latin1_General_CP1_CI_AS"? - sql-сървър, база данни, tsql, съпоставяне

Имам SQL заявка за създаване на базата данни в SQLServer, както е посочено по-долу:

create database yourdb
on
( name = "yourdb_dat",
filename = "c:program filesmicrosoft sql servermssql.1mssqldatayourdbdat.mdf",
size = 25mb,
maxsize = 1500mb,
filegrowth = 10mb )
log on
( name = "yourdb_log",
filename = "c:program filesmicrosoft sql servermssql.1mssqldatayourdblog.ldf",
size = 7mb,
maxsize = 375mb,
filegrowth = 10mb )
COLLATE SQL_Latin1_General_CP1_CI_AS;
go

Тя работи добре.

Докато останалата част от SQL е ясна, че съм доста объркан за функционалността на COLLATE SQL_Latin1_General_CP1_CI_AS.

Може ли някой да ми обясни това? Също така бих искал да знам дали създаването на базата данни по този начин е добра практика?

Отговори:

174 за отговор № 1

Той задава начина на сортиране на сървъра на базата данни. в такъв случай:

SQL_Latin1_General_CP1_CI_AS

разделя на интересни части:

  1. latin1 прави сървър лекува струни използвайки charset latin 1, основно ascii
  2. CP1 щандове за кодова страница 1252
  3. CI сравнителни данни без значение, така че "ABC" ще бъде равен на "abc"
  4. AS чувствителен акцент, така че "ü" не е равен на

Послепис За по-подробна информация не забравяйте read @ solomon-rutzky 's answer.


22 за отговор № 2

CP1 означава "Код Page 1" - технически това означава код 1252


17 за отговор № 3

Моля, имайте предвид, че приетият отговор е малконепълна. Да, при най-основно ниво сортиране на дръжки. НО, правилата за сравнение, дефинирани от избраното сортиране, се използват на много места извън потребителските заявки срещу потребителски данни.

Най- COLLATE {collation_name} клауза на CREATE DATABASE изразът определя подредбата по подразбиране на База данни, и не сървърът; Колорации по подразбиране на ниво база данни и сървърно ниво контролират различни неща.

Ниво на сървъра (т.е. инстанция) контроли:

  • Съпоставяне на ниво база данни за системни бази данни: master, model, msdb, и tempdb.
  • Благодарение на контролирането на DB-ниво на сравняване tempdb, тогава то е подразбиращото се сортиране за колони от низове във временни таблици (глобални и локални), но не и таблични променливи.
  • Благодарение на контролирането на DB-ниво на сравняване master, тогава се използва Collation Сървър ниво данни, като имената на базата данни (т.е. name колона в sys.databases), Имена за вход и т.н.
  • Обработка на имена на параметри / променливи
  • Обработка на имена на курсори
  • Работа с GOTO етикети
  • Стандартно сортиране, използвано за новосъздадените бази данни, когато COLLATE липсва клауза

База данни на ниво контроли:

  • Подреждане по подразбиране, използвано за новосъздадени колони с низове (CHAR, VARCHAR, NCHAR, NVARCHAR, TEXT, и NTEXT - но не използвайте TEXT или NTEXT) когато COLLATE клауза липсва в дефиницията на колоната. Това важи и за двете CREATE TABLE и ALTER TABLE ... ADD изявления.
  • Стандартно сортиране, използвано за литерали с низ (т.е. "some text") и низови променливи (т.е. @StringVariable). Тази подредба се използва само при сравняване на низове и променливи с други низове и променливи. Когато се сравняват низове / променливи с колони, ще се използва Съпоставянето на колоната.
  • Използваната за сортиране База данни на ниво мета-данни, като имена на обекти (т.е. sys.objects), имена на колони (т.е. sys.columns), имена на индекси (т.е. sys.indexes) и др.
  • Използваната за сортиране База данни на ниво обекти: таблици, колони, индекси и др.

Също:

  • Сортиране, започващо с SQL_ са старите (и определено остарели, дори ако не са официално отхвърлени) специфични за SQL Server Collations (създадени преди SQL Server да може да използва Collations на ниво OS).
  • Всички останали съпоставки са съпоставяне на Windows и трябва да бъдат използваните.
  • ASCII е кодировка, която е 8-битова (за обичайна употреба; технически "ASCII" е 7-битов с символи 0 - 127, а "Extended ASCII" е 8-битов с символи 0 - 255)
  • Latin1 отнася се за културата / локал, който определя:
    • Страница с код за CHAR, VARCHAR, и TEXT данни (колони, литерали и променливи). Кодовата страница е "разширената" част на Extended ASCII и контролира кои символи се използват за стойности 128 - 255.
    • Правилата, по които знаците се сортират и сравняват. Това обхваща и двете VARCHAR и NVARCHAR (т.е. Unicode) данни.

15 за отговор № 4

Най- сверявам ключова дума определя какъв тип набор от символи и правила (ред, правила за конфронтация), които използвате за низови стойности.

Например в случая използвате латински правила с нечувствителен към регистър (CI) и чувствителен акцент (КАТО)

Можете да се обърнете към това документация


8 за отговор № 5

Това указва подредбата по подразбиране за базата данни. Всяко текстово поле, което създавате в таблици в базата данни, ще използва това сортиране, освен ако не посочите друго.

Базата данни винаги има подреждане по подразбиране. Ако не посочвате, се използва подразбиращото се сортиране на потребителския модел на SQL Server.

Това се показва от името на подреждането, което използватеизползва код Latin1 код 1, не е чувствителен към регистър (CI) и акцент чувствителен (AS). Това съпоставяне се използва в САЩ, така че ще съдържа правила за сортиране, които се използват в САЩ.

Съпоставянето решава как се сравняват текстовите стойности за равенство и подобие и как те се сравняват при сортиране. Кодовата страница се използва, когато се съхраняват не-unicode данни, напр. Varchar полета.