Vissza

MSSQL - területi beállítások

  György Retek

  2017.08.30. 17:07

Nemzetközi környezetben a legkülönbözőbb informatikai rendszerekre igaz hogy gyakran előjönnek problémák, pl. különleges karakterek szövegekben, eltérő dátum és számábrázolás, amik kezelése nem mindig triviális. Például keleti szövegek tárolása latin betűkészleten nem lehetséges, szükség lesz bővebb, unicode karakterkészlet használatára, de ekkor is kérdéses pl. hogy a kínai-szanszkrit-arab karakterek szöveg rendezésekor hová kerüljenek, a latin betűk elé, mögé, esetleg hangi jelentés alapján közé. De ha a magyar környezetnél maradunk, ott sem ritka különféle rendszereknél -pláne ha az régebbi - hogy az "é", "í" hosszú ékezetes betűk a "z" után kerülnek, mivel az angol ábécében nem található karakterek kódja magasabb a z-nél.

MSSQL-nél a collation (betűkészlet, rendezési szabályok) tulajdonság határozza meg a karakteres változókon alkalmazott operátorok működését. Rendezésnél és szűrésnél megadható hogy milyen nyelvi szabályok szerint történjen a művelet (char, varchar, ntext oszlopoknál), collate kulcsszó segítségével. Az adattáblák oszlopainak collation-ja melyet a tábla létrehozásakor lehetett beállítani - illetve az adatbázis alapértelmezett típusát kapta, alapértelmezetten megadja hogy történik a művelet, ezt felülírhatjuk. Bizonyos collation-ok csak unicode adattípusokra használhatóak.

Adatbázis szinten megadható alapértelmezett collation:

CREATE DATABASE teszt
COLLATE SQL_Latin1_General_CP1_CI_AS ; 


ALTER DATABASE teszt
COLLATE Latin1_General_100_CI_AS ;

A collation úgy áll össze,

1. van egy specifikus rész, pl. ország, nyelv, pl „Latin1_General_100”

2. majd kis-nagybetű figyelembevétele:

  • CI (Case Insensitive) - nem tesz különbséget a kis és nagy betű között
  • CS (Case Sensitive) - különbséget tesz kis és nagy betű között

3. ékezet figyelembevétele

  • AI (Accent Insensitive) ékezet nincs hatással
  • AS (Accent Sensitive) hatással van

azaz a Latin1_General_100_CI_AS latin (angol) abc szerint rendez és csak ékezetre érzékeny.

Lekérdezésnél a következő lesz a szintaxis, ha el akarok térni a beállított collationtól:

select * from stops
 where stop_name collate Latin1_General_100_CS_AS like '%Bud%'
--kis-nagybetű érzékeny, ékezetfüggő szűrés
 order by stop_name collate Latin1_General_100_CI_AS
--kis-nagybetű független rendezés

Számok, dátumok formázására első sorban a format parancs szolgál, ahol megadható ország, vagy maszk:

select FORMAT(1.11, 'N', 'en-us') --usa szám
1.11
select FORMAT(1.11, 'N', 'hu-hu') --magyar szám
1,11
select FORMAT(1.11, 'C', 'en-us') --usa pénz
$1.11
select FORMAT(1.11, 'C', 'hu-hu') --magyar pénz
1,11 Ft
select FORMAT(1.11, '00.0') --maszk
01.1
select FORMAT(getdate(),'D','en-us')--usa dátum
Wednesday, August 16, 2017
select FORMAT(getdate(),'D','hu-hu')--magyar dátum
2017. augusztus 16.
select FORMAT(getdate(),'yyyy-MM-dd')--dátum-maszk
2017-08-16

Másik lehetőség a számformázásra az str függvény, ez a számot stringgé konvertálja, a két paramétere a tizedes pont előtti és utáni számjegyek számát adja meg:

select str(12345.6789, 10, 3)
12345.679

select str(12345.6789, 3, 3)--hibás, nem fér ki
***

Az inputhoz általában maszk is megadandó, nem kezeli a nyelvi formát automatikusan, azaz pl. az 1000 számot 1.000,00 formában nem kaphatja meg az SQL szerver, annak átalakításáról gondoskodni kell.

Az sql szerver nyelvi beállítása 3 szinten történhet: SQL Server példány  -> User login -> Session szintű beállítás, a magasabbat örökli az alacsonyabb, viszont felüldefiniálható.

SELECT @@language   -- a session nyelvét írja ki

Globális nyelv megváltoztatása szerver szinten (rendszergazdai feladat):

EXEC sp_configure 'default language', 0 ;--nyelv beállítása, 0 angol, 13 magyar

ALTER LOGIN a felhasználói beállítások megváltoztatása (többi felhasználóra nem hat):

ALTER LOGIN user with
DEFAULT_LANGUAGE = "Hungarian"

Session szinten (másik sessionra nem hat):

SET LANGUAGE Italiano;
L'impostazione della lingua è stata sostituita con Italiano.

SET LANGUAGE Magyar;
Nyelvi beállítás átállítva a következőre: magyar.

Ez első sorban az adatbázis üzeneteinek nyelvét állítja, de hat pl. a datename függvényre, a datetime formázására is.

Természetesen a szám és dátum adatok tárolása területi beállításoktól független, a megjelenítésre, illetve néhány esetben az inputok feldolgozására vannak ezek a beállítások hatással.

Amennyiben továbblépnél és szeretnéd ezekből a lehetőségekből a mindennapi munkában minél többet hasznosítani, keress fel minket az elérhetőségeink valamelyikén, és mi segítünk megtalálni azokat a területeket, ahol a legnagyobb üzleti hasznot realizálhatod egy ilyen eszköz használatával, természetesen szakmai támogatást nyújtunk a bevezetéshez


   

Megjegyzések
Még nincsenek hozzászólások. Légy első!

Blog kategória

Címkefelhő

Bloggerek

Mihály Kávási
Bejegyzések: 9
Csillagok: 6
Dátum: 2017.11.20.
Kata Rozmis
Bejegyzések: 12
Csillagok: 12
Dátum: 2017.11.15.
György Retek
Bejegyzések: 6
Csillagok: 8
Dátum: 2017.10.30.
Zsolt Hajnalka
Bejegyzések: 2
Csillagok: 0
Dátum: 2017.06.01.
Bence Baranyás
Bejegyzések: 1
Csillagok: 1
Dátum: 2017.05.24.

Kapcsolat