januar 28, 2022

{coding}Sight

når du udvikler et program eller skriver en kode i databasesystemet, er det afgørende at forstå, hvordan data vil blive sorteret og sammenlignet. Du kan gemme dine data på et bestemt sprog, eller du vil måske gerne have, at vi behandler store og små bogstaver separat. Microsoft har leveret en serverindstilling kaldet Collation for at kontrollere og imødekomme sådanne krav.

Hvad er sortering i server?

vi kan indstille sorteringen på forskellige niveauer i serveren som angivet nedenfor.

  • serverniveau
  • databaseniveau
  • Kolonneniveau
  • Ekspressionsniveau

sorteringsniveauet på serverniveau kan undertiden kaldes sorteringsniveau på serverniveau.

sorteringen af databaseniveau nedarves fra sorteringsindstillingen for serverniveau, hvis du ikke vælger nogen specifik sortering under oprettelsen af databasen. Du kan også ændre databaseniveauet senere. Bemærk, at ændring af databasesortering kun vil blive anvendt til kommende eller nye objekter, der oprettes efter sorteringsændringen.

ny sortering ændrer ikke eksisterende data gemt i tabeller, der blev sorteret med den sidste sorteringstype. Applikationsteamet har brug for yderligere planlægning for at håndtere denne lagrede datakonvertering på grund af den nye sorteringsindstilling.

der er flere måder at gøre det på. Den ene er at kopiere dataene fra den eksisterende tabel til en ny tabel oprettet med den nye sortering og derefter erstatte den gamle tabel med den nye. Du kan også flytte tabeldataene til en ny database ved at have en ny sortering og erstatte den gamle database med den nye.

Bemærk: ændring af sortering er en kompleks opgave, og du bør undgå det, medmindre du har en obligatorisk business case.

Hvordan finder og ændrer man Databasesamling i server?

lad os gå videre og kontrollere sorteringen af SERVERFOREKOMSTEN og alle databaser, der er hostet på den forekomst. Du kan tjekke sortering ved at åbne vinduet database eller instance level properties vha. Sorteringen for hver database gemmes i systemobjektet sys.databaser-vi får adgang til det for at få disse oplysninger.

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

jeg har udført ovenstående T-kvm-erklæring og fik nedenstående output. Vi kan se, at alle databaser og sortering på serverniveau har de samme indstillinger som Kvl_latin1_general_cp1_ci_as. Det betyder, at databasesamlinger er arvet af sorteringen på serverniveau, mens de oprettes, og standardværdien er ikke ændret.

udførelse af T-SEKL-Erklæring

lad mig nu vise dig, hvordan du kontrollerer databasesamlingen ved hjælp af GUI i Server Management Studio.

Opret først forbindelse til din serverinstans ved hjælp af Server Management Studio. Udvid instansnoden efterfulgt af Databasemappen. Højreklik på måldatabasen, og vælg Egenskaber:

vælg Egenskaber i target database

du vil få nedenstående Database Egenskaber vindue.

Klik nu på fanen Indstillinger fra panelet til venstre. Du får flere egenskaber indstillinger i højre side panel. Collation er den første egenskab på denne side – du kan se, at den er den samme som den var i ovenstående t-SKL-script.

på samme måde kan du klikke på noden til serverforekomst og højreklikke på egenskaberne for eksempelniveau for at se sorteringen på serverniveau.

sortering på serverniveau

hvis du vil ændre denne sortering til en ny sortering, skal du bare klikke på rullemenuen sortering og vælge den indstilling, du har brug for. Sørg for, at du har lavet en fuld sikkerhedskopi af din database, før du gør det.

ændring af sorteringen til en ny

jeg har valgt en lignende sortering med store og små bogstaver 1_general_cp1_cs_as for denne database og klikket på OK for at anvende den. Bemærke: Sørg for, at ingen er forbundet til måldatabasen under denne procedure, ellers skal du skifte tilstand til en enkelt bruger og ændre denne konfiguration.

Databaseegenskaber

du kan også ændre denne databasesamling vha. Til det skal du bruge COLLATE-klausulen i Alter-DATABASEERKLÆRINGEN.

først har vi skiftet databasen til single-user mode, derefter ændret sorteringen og endelig flyttet databasen til multi-user mode.

--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

liste over alle understøttede sorteringer i server

dette afsnit viser dig, hvordan du finder alle tilgængelige sorteringer i server Server. Lad mig først vise dig, hvordan du får listen over alle understøttede sorteringer til SERVERFOREKOMSTEN.

vi har en systemfunktion kaldet fn_helpcollations (), som du kan bruge til at hente alle sorteringer.

Kør nedenstående kommando for at få vist listen.

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

vi kan se alle 5508 understøttede samlinger i output sektionen. Hvis du ikke er sikker på, hvilken sortering du skal vælge, Kan du bruge hvor-klausulen i nedenstående script til at filtrere alle mulige sorteringer, der kan indstilles til databasen.

alle understøttede sorteringer

lad os sige, at du er nødt til at gemme dine data på det amerikanske engelske sprog og ønsker, at serveren skal håndtere dem i et stort set følsomt format. Du kan bruge nedenstående kommando til at hente listen over mulige og understøttede sorteringer til din forespørgsel:

--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%'

outputtet viser kun 10 samlinger, der opfylder din forespørgsel. Du kan bruge ovenstående script til at filtrere forskellige sorteringer ud.

filtrering af samlingerne

virkningen af at ændre Databasesamling på Forespørgselsoutput

i dette afsnit vil jeg vise dig forskellen mellem de to output fra den samme forespørgsel, når de udføres med forskellige sorteringer.

først vil jeg oprette en database med navnet MSSKL med en sortering (Kvl_latin1_general_cp1_cs_as). Så kører jeg den samme forespørgsel to gange for at få output. Senere vil jeg ændre sorteringen til Kvl_latin1_general_cp1_ci_as og igen køre de samme forespørgsler for at få deres output. Du kan sammenligne begge output og forstå virkningen af at ændre en databasesamling. Så lad os starte med oprettelse af database.

start det nye databaseoprettelsesvindue som vist på nedenstående billede. Du kan også oprette denne database vha. Derefter kan du se databasenavnet og dets datafiler. Klik nu på den anden fane i panelet til venstre for at skifte til egenskabsvinduet for sortering.

lancering af et nyt databaseoprettelsesvindue

du kan se, at sorteringsnavnet for denne database er standard. Det betyder, at denne database arver sortering fra sorteringstypen på serverniveau. Klik på rullemenuen sortering for at vælge din nye sortering.

valg af ny sortering

jeg har valgt nedenstående sortering Kvl_latin1_general_cp1_cs_as for denne database – ikke standard en. Klik på OK for at fortsætte med oprettelsen af databasen.

valg af ny sortering

Kontroller nu databasesamlingen for en nyoprettet database. Vi kan se, at det er Kvl_latin1_general_cp1_cs_as, som vi har valgt i det foregående trin.

kontrol af databasesamlingen for nyoprettet database

i Sagsfølsom tilstand står CS for sagsfølsom tilstand, og CI står for sagsfølsom tilstand. Nu Kan du køre enten nedenstående T-kode eller en hvilken som helst kode for at få output.

jeg har udført den samme kommando to gange. Det første script filtrerer kolonnenavnene med en værdi SYS med store bogstaver, mens det andet script filtrerer den samme kolonne med den samme værdi sys med små bogstaver. Outputafsnittet viser, at det første script ikke har vist noget output, mens det andet script har vist output på grund af dets store og små bogstaver.

Select * from sysusersWhere name='SYS'GoSelect * from sysusersWhere name='sys'GO
virkningen af at ændre Databasesamling på Forespørgselsoutput

nu vil vi ændre sorteringen af denne database til den store og små bogstaver. Du kan også ændre det via GUI ved at åbne vinduet Databaseegenskaber i 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

jeg har udført ovenstående script i et skud, og databasesamlingen blev med succes ændret til en ny samling med case-ufølsom support.

ny sortering med case-ufølsom støtte

du kan bekræfte denne ændring ved at køre nedenstående scripts for at kontrollere samlingen af den nyoprettede database. Vi kan se, at den nye sortering er indstillet til denne database i nedenstående billede.

ny sortering er indstillet til databasen

vi vil igen køre den samme T-SEKL-erklæring, før vi ændrer sorteringen for at se virkningen af denne ændring. Som vi kan se nu, er begge t-SEKL-udsagn i output.

virkningen af at ændre Databasesamling på Forespørgselsoutput

konklusion

jeg håber, at det er tydeligt, at sorteringen i serveren er afgørende. Vi har defineret, hvilken indvirkning det efterlader, hvis du foretager ændringer i sortering på ethvert niveau i . Altid gøre ordentlig planlægning og teste ændringer i din lavere livscyklus miljø først.

Stay tuned for min næste artikel, hvor jeg vil vise dig en trinvis metode til at ændre server-niveau sortering.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.