circuite Conflicte comparație (colaționare) în serverul Microsoft SQL 2018

circuite Conflicte comparație (colaționare) în serverul Microsoft SQL 2000

numire colaționare

date caracter

Reprezentarea mașinii de caracter sau semnul este diferite combinații de biți. Prin urmare, utilizarea de un octet pentru a stoca caractere permite definirea de până la 256 de caractere diferite. Dacă crește cantitatea de date la doi octeți, va fi posibil să se recunoască 65.536 de caractere.

Pagina de cod este nimeni altul decât setul de diferite combinații de stări de biți (de 256), în structura octet. Aceste combinații determină majuscule și minuscule litere, cifre, caractere speciale. Atunci când transferul de date între sistemele informatice cu diferite pagini de cod trebuie să efectueze conversia. bit combinație care nu există în schema de destinație, ca rezultat vei pierde simboluri.

Pentru a evita aceste situații, standardele internaționale de organizare și ISO au dezvoltat un grup de standard de Unicode Unicode.

Ordinea de sortare stabilește regulile de comparație și reprezentarea caracterelor. De exemplu, caracterul „un“ simbol mai mare „b“. În plus, ordinea de sortare a seturilor de caractere ce se potrivesc colțul din dreapta sus și mici.

Descriere circuite de potrivire

circuite comparație colaționare determina modalități de stocare și de prelucrare a datelor serverului de caractere. Fiecare schemă prevede:

  • ordine de sortare pentru datele codate Unicode;
  • ordinea de sortare pentru datele codificate nu-Unicode;
  • pagina de cod pentru datele codificate nu-Unicode.

Pe server, cele două sisteme sunt puse în aplicare de grup - colationarile Windows și colationarile SQL. Primul grup de circuite comparație implementate pe server pentru a suporta Windows setările regionale. Se recomandă să se lucreze cu acest grup. Al doilea grup, SQL confruntările, este utilizat pentru compatibilitate cu versiunile anterioare ale MS SQL Server. Alegerea ei poate fi justificată, în cazul în care aveți de gând să comunice cu MS SQL 6.5 sau MS SQL 7.0 server sau dacă o aplicație funcționează cu datele proiectate pentru a satisface circuitele de potrivire versiunile anterioare de server.

La niveluri diferite pot utiliza schema de mapare diferită:

  1. nivel de server. schema de cartografiere selectat în timpul instalării serverului. Schema selectat va fi utilizat în mod implicit pentru toate bazele de date de sistem și a bazelor de date de utilizator, precum și toate obiectele din fiecare bază de date. Dacă este necesar, modificați schema la nivel de server folosind Rebuild utilitate master.
  2. nivelul bazei de date. Hărțile pot fi specificate la crearea bazei de date. Toate facilitățile de bază vor folosi această schemă prestabilită. De asemenea, sistemul selectat va fi utilizat pentru variabile de caractere și parametrii. Modificarea compararea schemei bazei de date poate fi folosind comanda ALTER DATABASE.
  3. câmp Tabelul nivel. La crearea unui tabel, puteți specifica propria cartografiere.

La nivelul obiectelor bazei de date (tabele), schema nu este specificată.

aplicație practică

În mod ironic, pe schema de cartografiere, precum și pe factorii declansatori, de multe ori nu acorde o atenție suficientă. Mai precis - pe schemele amintesc doar atunci când apare o eroare «Nu se poate rezolva conflictul colaționare». Pentru rezolvare a problemelor este necesară pentru a înțelege cauzele și căile de posibile soluții lor.

La alegerea Cyrillic_General_CI_AS toate baza de date a sistemului, inclusiv baze de date tempdb va folosi acel circuit de comparație. După cum sa arătat mai sus, toate bazele de date de utilizator nou create și tabelul implicit va avea exact același model. Cu toate acestea, nimic nu împiedică la instalare selectați o altă schemă, și, de asemenea, să lucreze cu ea.

De exemplu, ia în considerare situația în care serverul este instalat cu Cyrillic_General_CI_AS colaționare, acolo NEW_BASE server de baze de date cu hărți Cyrillic_General_CI_AS, și baza de date OLD_BASE de a lucra cu vechea aplicație la SQL_Latin1_General_CP1251_CI_AS schemei. Pentru NEW_BASE de bază nu se poate face griji - în schema server de potrivire Toate cererile vor gestiona în mod corespunzător datele cu caracter. Un alt lucru, atunci când datele din OLD_BASE necesare.

Eroare «Nu se poate rezolva conflictul colaționare» va apărea:

  • Când compușii JOIN sau UNION cu tabele din baza de date cu o altă comparație schemă.
  • Atunci când se lucrează cu tabele temporare în contextul bazei de date de producție. tabele temporare sunt create în baza tempdb, în ​​cazul în care, după cum sa observat deja, serverul utilizează schema de cartografiere și date caracter în acest caz, nu pot fi comparate în mod corespunzător.
  • Cel mai frecvent caz - atunci când se încearcă să se compare valorile de caracter domenii diverse scheme de comparație (chiar în aceeași foaie de calcul sau baza de date).

Mesajul de eroare spune totul - serverul nu este în măsură să compare caracterele din diferite circuite de potrivire. Decizia sugerează următoarele: să furnizeze date la același model colaționarea.

Dacă interogarea bazei de date OLD_BASE lucrează cu tabele temporare sau variabile de tip tabel, atunci când le creați este necesar să se precizeze în mod explicit regimul de colaționare dorit pentru fiecare câmp de tip caracter. De exemplu:

În continuare, să facă o legătură între domenii cu diferite circuite nu direct. Prin urmare, este imposibil să se facă o JOIN sau UNION tabele cu diferite scheme de colaționare identice sau diferite baze de date. În caz contrar, veți primi din nou un mesaj de eroare. În acest caz, câmpul trebuie să conducă unite, de asemenea, la o schemă de circuit de conversie folosind comparații. conexiune Presupunem că OLD_BASE tabele NEW_BASE și poate fi efectuată după cum urmează:

Astfel, o serie de limitări - nu se schimba circuit pentru câmpuri calculate, câmpuri indexate, câmpuri cu CHECK restricție sau chei străine. Trebuie să le eliminați mai întâi, și apoi modificați schema de cartografiere pentru a re-crea. Așa că munca poate fi facuta aici este mare și serioasă.

Dacă nu reușiți să conducă o nouă bază de date pentru sistemul de server, și nu se poate schimba codul în aplicația achiziționată - este necesar pentru a schimba schema de server și schema bazei de date (din nou, în cazul în care nu se va opri funcționarea altor aplicații și baze de date) . Cea mai sigură și cea mai simplă cale de a înlocui sistemul de server - pentru a reinstala întregul server, care, în principiu, este echivalent cu Rebuild utilitate master. După aceea, este necesar să se reconstruiască structura bazei de date (dar nu și datele din ele!) Cu un nou sistem de colaționare, iar apoi importați datele în structura actualizată.

În cazul în care o bază de date mai vechi este legat de un anumit sistem de colaționare, iar noul cadru utilizează o schemă diferită, atunci există o modalitate - de a oferi un nou server sau a instala un nume instanță (instanță) SQL-Server. Cu toate acestea, nu este clar cât de multe vor avea resurse pentru a satisface instalarea de server pe nume, și suporții ati dobândit aplicarea, în general, o astfel de configurație. Este posibil ca va fi mai ușor de instalat un server separat cu schema de colaționare pe o mașină separată.

concluzie

După cum puteți vedea - alegerea schemei de mapare poate afecta în mod semnificativ dezvoltarea și întreținerea de soluții de server. Prin urmare, este necesar să se determine alegerea optimă a sistemelor de colaționare într-un stadiu incipient, în conformitate cu cerințele aplicațiilor existente și dezvoltarea strategiei a sistemului în ansamblu.