január 28, 2022

{coding}látvány

amikor egy alkalmazást fejleszt vagy kódot ír az SQL adatbázis rendszerbe, fontos megérteni, hogy az adatok hogyan lesznek rendezve és összehasonlítva. Az adatokat egy adott nyelven is tárolhatja, vagy érdemes lehet, hogy az SQL Server külön kezelje a kis-és nagybetűérzékeny adatokat. A Microsoft egy SQL Server-beállítást, az úgynevezett Collation-t adott meg az ilyen követelmények vezérlésére és kezelésére.

mi az SQL Serverben az összevetés?

az SQL Server különböző szintjein állíthatjuk be az összehasonlítást az alábbiak szerint.

  • Kiszolgálószint
  • Adatbázisszint
  • Oszlopszint
  • Kifejezésszint

a Kiszolgálószint-összevetést néha SQL Server Példányszintű összevetésnek is nevezhetjük.

az adatbázis szintű egyezés a kiszolgálószintű egyezés beállítástól örökölhető, ha az adatbázis létrehozása során nem választ ki konkrét egyezést. Az adatbázis – szintű összevetés később is módosítható. Ne feledje, hogy az adatbázis-összevetés módosítása csak a következő vagy új objektumokra vonatkozik, amelyek az összevetés módosítása után jönnek létre.

az új egybevetés nem módosítja az utolsó egybevetés típusával rendezett táblázatokban tárolt meglévő adatokat. Az alkalmazás csapatnak további tervezésre van szüksége a tárolt adatok átalakításának kezelésére az új összevetés beállítás miatt.

ennek számos módja van. Az egyik az, hogy másolja az adatokat a meglévő táblából egy új táblába, amelyet az új összevetéssel hoztak létre, majd cserélje ki a régi táblát az újra. A táblázat adatait egy új adatbázisba is áthelyezheti egy új összevetéssel, és a régi adatbázist kicserélheti az újra.

megjegyzés: a leválogatás megváltoztatása összetett feladat, ezért kerülje el, hacsak nincs kötelező üzleti esete.

hogyan lehet megtalálni és megváltoztatni az adatbázis-összeállítást az SQL Serverben?

menjünk előre, és ellenőrizzük az SQL Server példány és az adott példányon tárolt összes adatbázis összevetését. Az összevetést az adatbázis vagy a példány szintű tulajdonságok ablakának elérésével ellenőrizheti az SQL Server Management Studio segítségével, vagy egyszerűen végrehajthatja az alábbi T-SQL utasítást. Az egyes adatbázisok összevetését a rendszerobjektum sys tárolja.adatbázisok-hozzáférünk hozzá, hogy megszerezzük ezeket az információkat.

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

végrehajtottam a fenti T-SQL utasítást, és megkaptam az alábbi kimenetet. Láthatjuk, hogy minden adatbázis és szerver szintű leválogatás ugyanazokkal a beállításokkal rendelkezik, mint az SQL_Latin1_General_CP1_CI_AS. Ez azt jelenti, hogy az adatbázis-összevonásokat a létrehozás során a kiszolgálószintű összevonás örökölte, és az alapértelmezett érték nem változott.

a T-SQL utasítás végrehajtásának kimenete

most hadd mutassam meg, hogyan ellenőrizheti az adatbázis-összeállítást a GUI segítségével az SQL Server Management Studio alkalmazásban.

először csatlakozzon az SQL Server példányhoz az SQL Server Management Studio használatával. Bontsa ki a példánycsomópontot, majd az adatbázisok mappát. Kattintson a jobb gombbal a céladatbázisra, majd válassza a Tulajdonságok lehetőséget:

tulajdonságok kiválasztása a céladatbázisban

az alábbi Adatbázis tulajdonságai ablakot kapja meg.

most kattintson az Opciók fülre a bal oldali panelen. A jobb oldali panelen több tulajdonságbeállítást kap. Az összevetés az oldal első tulajdonsága-láthatja, hogy ugyanaz, mint a fenti T-SQL szkriptben.

hasonlóképpen kattintson az SQL Server példánycsomópontra, és kattintson a jobb gombbal a példányszintű tulajdonságokra a kiszolgálószintű egyezés megtekintéséhez.

szerver szintű összevetés

ha meg szeretné változtatni ezt az egyezést egy új egyezés, akkor csak meg kell, hogy kattintson a egyezés legördülő menüből válassza ki a kívánt opciót. Mielőtt megtenné, győződjön meg róla, hogy teljes biztonsági másolatot készített az adatbázisról.

az összevetés megváltoztatása egy újra

ehhez az adatbázishoz hasonló kis-és nagybetűérzékeny sql_latin1_general_cp1_cs_as-t választottam, és az OK gombra kattintva alkalmaztam. Megjegyzés: Győződjön meg róla, hogy senki sem csatlakozik a céladatbázishoz az eljárás során, különben át kell váltania az üzemmódot egyfelhasználósra, és módosítania kell ezt a konfigurációt.

Adatbázis tulajdonságai

ezt az adatbázis-összeállítást a T-SQL utasítás segítségével is megváltoztathatja. Ehhez használja az Alter DATABASE utasítás COLLATE záradékát.

először az adatbázist egyfelhasználós módba kapcsoltuk, majd megváltoztattuk az összevetést, végül áthelyeztük az adatbázist többfelhasználós módba.

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

sorolja fel az SQL Server összes támogatott összevetését

ez a szakasz bemutatja, hogyan lehet megtalálni az SQL Server összes elérhető összevetését. Először hadd mutassam meg, hogyan szerezheti be az SQL Server példány összes támogatott összevetésének listáját.

az SQL Server rendelkezik egy fn_helpcollations() nevű rendszerfunkcióval, amelyet az összes leválogatás lekérésére használhat.

futtassa az alábbi parancsot a lista megjelenítéséhez.

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

láthatjuk az összes 5508 támogatott egybevetés a kimenet részben. Ha nem biztos abban, hogy melyik összeállítást válassza, akkor az alábbi szkript WHERE záradékával kiszűrheti az adatbázisba beállítható összes lehetséges összeállítást.

minden támogatott egybevetés

tegyük fel, hogy az adatokat az Egyesült Államok angol nyelvén kell tárolnia, és azt szeretné, hogy az SQL Server kis-és nagybetűérzékeny formátumban kezelje. Az alábbi paranccsal lekérheti a lekérdezés lehetséges és támogatott összevetéseinek listáját:

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

a kimenet csak 10 lekérdezést jelenít meg, amelyek megfelelnek a lekérdezésnek. A fenti szkript segítségével kiszűrheti a különféle válogatásokat.

az összevonások szűrése

az adatbázis-összevetés megváltoztatásának hatása a lekérdezés kimenetére

ebben a szakaszban megmutatom a különbséget ugyanazon lekérdezés két kimenete között, amikor különböző összevetésekkel hajtják végre őket.

először létrehozok egy MSSQL nevű adatbázist egy leválogatással (SQL_Latin1_General_CP1_CS_AS). Ezután kétszer futtatom ugyanazt a lekérdezést, hogy megkapjam a kimenetet. Később megváltoztatom az összevonást SQL_Latin1_General_CP1_CI_AS-ra, majd újra futtatom ugyanazokat a lekérdezéseket, hogy megkapják a kimenetüket. Összehasonlíthatja mindkét kimenetet, és megértheti az adatbázis-összevetés megváltoztatásának hatását. Kezdjük tehát az adatbázis létrehozásával.

indítsa el az új adatbázis-létrehozási ablakot az alábbi képen látható módon. Ezt az adatbázist T-SQL segítségével is létrehozhatja. Ezután láthatja az adatbázis nevét és annak adatfájljait. Most kattintson a bal oldali panel második fülére az összevetés tulajdonság ablakra való váltáshoz.

új adatbázis-létrehozási ablak indítása

láthatja, hogy ennek az adatbázisnak az összevetési neve az alapértelmezett. Ez azt jelenti, hogy ez az adatbázis örökli az összevetést a kiszolgálószintű összevetés típusától. Kattintson az összevetés legördülő menüre az új összevetés kiválasztásához.

új válogatás kiválasztása

az alábbi sql_latin1_general_cp1_cs_as összeállítást választottam ehhez az adatbázishoz – nem az alapértelmezett. Kattintson az OK gombra az adatbázis létrehozásának folytatásához.

új válogatás kiválasztása

most ellenőrizze az újonnan létrehozott adatbázis adatbázisát. Láthatjuk, hogy SQL_Latin1_General_CP1_CS_AS, ahogy az előző lépésben kiválasztottuk.

az újonnan létrehozott adatbázis adatbázisának ellenőrzése

az SQL_Latin1_General_CP1_CS_AS-ban a CS a kisbetűérzékeny módot, A CI pedig a kisbetűérzékeny módot jelenti. Most futtathatja az alábbi T-SQL kódot vagy bármilyen kódot a kimenet megszerzéséhez.

kétszer hajtottam végre ugyanazt a parancsot. Az első szkript az oszlopneveket nagybetűkkel SYS értékkel szűri, míg a második szkript ugyanazt az oszlopot kis betűkkel azonos sys értékkel szűri. A kimenet szakasz azt mutatja, hogy az első szkript nem mutatott kimenetet, míg a második szkript a kimenetet nagybetűérzékeny viselkedése miatt jelenítette meg.

Select * from sysusersWhere name='SYS'GoSelect * from sysusersWhere name='sys'GO
az adatbázis-összevetés megváltoztatásának hatása a lekérdezés kimenetére

most az alábbi T-SQL utasítások végrehajtásával megváltoztatjuk az adatbázis összevonását az sql_latin1_general_cp1_ci_as kis-érzéketlen leválogatásra. A GUI-n keresztül is megváltoztathatja az SQL Server Management Studio Adatbázis-Tulajdonságok ablakának elérésével.

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

a fenti szkriptet egy lövéssel végrehajtottam, és az adatbázis-leválogatást sikeresen megváltoztattam egy új, kisbetűérzékeny támogatással rendelkező leválogatásra.

új válogatás, amely kis-érzéketlen támogatással rendelkezik

ezt a változást az alábbi parancsfájlok futtatásával ellenőrizheti az újonnan létrehozott MSSQL adatbázis összevetésében. Az alábbi képen láthatjuk, hogy az új összevetés ehhez az adatbázishoz van beállítva.

új leválogatás van beállítva az adatbázishoz

újra futtatjuk ugyanazt a T-SQL utasítást, mielőtt megváltoztatnánk az összevetést, hogy lássuk ennek a változásnak a hatását. Mint most láthatjuk, mindkét T-SQL utasítás a kimenetben van.

az adatbázis-összevetés megváltoztatásának hatása a lekérdezés kimenetére

következtetés

remélem, nyilvánvaló, hogy az SQL Server-ben történő összevetés döntő fontosságú. Meghatároztuk, hogy milyen hatást hagy maga után, ha az SQL Server bármely szintjén módosítja az összevetést. Először mindig végezze el a megfelelő tervezést és tesztelje a módosításokat az alacsonyabb életciklusú környezetben.

Stay tuned az én következő cikk, ahol megmutatom egy lépésről-lépésre módszer változtatni szerver szintű egybevetés.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.