Share via


Regole di confronto e terminologia internazionale

Le regole di confronto in SQL Server forniscono le regole di ordinamento e le proprietà di distinzione tra maiuscole e minuscole e tra caratteri accentati e non accentati per i dati. Le regole di confronto utilizzate con dati di tipo carattere, quali char e varchar, definiscono la tabella codici e i caratteri corrispondenti che possono essere rappresentati per quel tipo di dati. Sia che si installi una nuova istanza di SQL Server, si ripristini il backup di un database o si stabiliscano connessioni tra database server e client, è importante comprendere i requisiti delle impostazioni locali, l'ordinamento e la modalità di distinzione tra maiuscole e minuscole e tra caratteri accentati e non accentati dei dati da utilizzare.

Quando si selezionano le regole di confronto per un server, un database, una colonna o un'espressione, si assegnano determinate caratteristiche ai dati che influiranno sui risultati di molte operazioni eseguite nel database. Ad esempio, quando si costruisce una query tramite ORDER BY, l'ordinamento del set di risultati può dipendere dalle regole di confronto applicate al database o specificate in una clausola COLLATE al livello di espressione della query.

Le regole di confronto possono contenere alcune o tutte le caratteristiche seguenti:

  • Distinzione maiuscole/minuscole

  • Distinzione caratteri accentati/non accentati

  • Distinzione Kana

  • Distinzione larghezza

Per utilizzare in modo ottimale il supporto delle regole di confronto di SQL Server, è necessario approfondire la conoscenza dei termini specificati in questo argomento e delle relative relazioni con le caratteristiche dei dati.

Termini

  • Regole di confronto

  • Impostazioni locali

  • Unicode

  • Tabella codici

  • Tipi di dati

  • Ordinamento

Regole di confronto

Le regole di confronto specificano gli schemi di bit che rappresentano i caratteri in un set di dati. Le regole di confronto determinano inoltre le regole per l'ordinamento e il confronto dei dati. SQL Server supporta l'archiviazione di oggetti con regole di confronto diverse in un singolo database. Per le colonne non Unicode, l'impostazione delle regole di confronto specifica la tabella codici dei dati e i caratteri che possono essere rappresentati. Per i dati spostati tra colonne non Unicode, è necessaria la conversione dalla tabella codici di origine a quella di destinazione.

I risultati di un'istruzione Transact-SQL possono variare se l'istruzione viene eseguita nel contesto di database diversi che utilizzano impostazioni diverse per le regole di confronto. Se possibile, utilizzare regole di confronto standardizzate per l'organizzazione. In questo modo, non è necessario specificare esplicitamente le regole di confronto in ogni carattere o espressione Unicode. Se è necessario utilizzare oggetti con impostazioni diverse per tabelle codici e regole di confronto, codificare le query in modo da considerare la precedenza delle regole di confronto. Per ulteriori informazioni, vedere Precedenza regole di confronto (Transact-SQL).

Le regole di confronto includono le caratteristiche di distinzione della lingua, distinzione tra maiuscole e minuscole, distinzione tra caratteri accentati e non accentati, distinzione Kana e distinzione della larghezza.

Le regole di confronto di SQL Server includono i set seguenti:

  • Regole di confronto di Windows
    Le regole di confronto di Windows definiscono le regole per l'archiviazione dei dati di tipo carattere in base alle impostazioni locali di Windows associate. Per le regole di confronto di Windows, il confronto dei dati non Unicode è implementato mediante lo stesso algoritmo dei dati Unicode. Le regole di confronto di base di Windows specificano l'alfabeto o la lingua da utilizzare quando viene applicato l'ordinamento del dizionario, nonché la tabella codici utilizzata per l'archiviazione di dati di tipo carattere non Unicode. Sia l'ordinamento Unicode che quello non Unicode sono compatibili con i confronti di stringhe di una versione specifica di Windows. In questo modo viene garantita la consistenza tra i tipi di dati in SQL Server e gli sviluppatori possono ordinare le stringhe all'interno delle applicazioni mediante le stesse regole utilizzate da SQL Server. Per ulteriori informazioni, vedere Impostazioni delle regole di confronto durante l'installazione.

  • Regole di confronto binarie
    Le regole di confronto binarie ordinano i dati in base alla sequenza di valori codificati definiti dalle impostazioni locali e dal tipo di dati. Per tali regole è prevista la distinzione tra maiuscole e minuscole. In SQL Server le regole di confronto binarie definiscono le impostazioni locali e la tabella codici ANSI da utilizzare. In questo modo viene applicato un ordinamento binario. Grazie alla loro semplicità, le regole di confronto binarie consentono di migliorare le prestazione dell'applicazione. Per i tipi di dati non Unicode, il confronto dei dati è basato sui punti di codice definiti nella tabella codici ANSI. Per i tipi di dati Unicode, il confronto dei dati è basato sui punti di codice Unicode. Per le regole di confronto binarie nei tipi di dati Unicode, le impostazioni locali non vengono considerate ai fini dell'ordinamento dei dati. Ad esempio, l'utilizzo di Latin_1_General_BIN e Japanese_BIN su dati Unicode restitusce risultati di ordinamento identici.

    Le regole di confronto binarie delle versioni precedenti di SQL Server confrontano il primo carattere come WCHAR, quindi eseguono un confronto byte per byte. Per motivi di compatibilità con le versioni precedenti, la semantica delle regole di confronto binarie esistente non verrà modificata.

    Le regole di confronto binarie nella versione attuale di SQL Server includono un set di regole per il confronto di punti di codice completo. È possibile eseguire la migrazione alle regole di confronto binarie per sfruttare i vantaggi offerti da confronti completi dei punti di codice. È consigliabile utilizzare le regole di confronto binarie per lo sviluppo di nuove applicazioni. Il suffisso BIN2 identifica i nomi delle regole di confronto che implementano la nuova semantica delle regole di confronto dei punti di codice. Per il nuovo ordinamento binario è disponibile inoltre un flag di confronto che corrisponde a BIN2. Per ulteriori informazioni, vedere Linee guida per l'utilizzo di regole di confronto BIN e BIN2.

  • SQL Server
    Le regole di confronto di SQL Server (SQL_*) garantiscono la compatibilità dell'ordinamento con le versioni precedenti di SQL Server. Le regole di ordinamento del dizionario per i dati non Unicode non sono compatibili con le routine di ordinamento disponibili nei sistemi operativi Windows. Tuttavia l'ordinamento dei dati Unicode è compatibile con una versione specifica di regole di ordinamento di Windows. Poiché le regole di confronto di SQL Server differiscono per i dati non Unicode e i dati Unicode, confrontando gli stessi dati verranno visualizzati risultati diversi, a seconda del tipo di dati sottostante. Per ulteriori informazioni, vedere Utilizzo di regole di confronto di SQL Server.

    [!NOTA]

    Quando si aggiorna un'istanza in lingua inglese di SQL Server, è possibile specificare le regole di confronto di SQL Server (SQL_*) per assicurare la compatibilità con le istanze esistenti di SQL Server. Poiché le regole di confronto predefinite per un'istanza di SQL Server vengono configurate durante l'installazione, è importante specificare attentamente le impostazioni per le regole di confronto nei casi seguenti:

    • Il codice dell'applicazione dipende dal comportamento di regole di confronto di SQL Server precedenti.

    • Con installazioni esistenti di SQL Server 6.5 o SQL Server 7.0 viene utilizzata la replica di SQL Server.

    • È necessario archiviare dati di tipo carattere in più lingue.

L'impostazione di regole di confronto è supportata ai seguenti livelli di un'istanza di SQL Server:

  • Regole di confronto a livello di server
    Le regole di confronto predefinite vengono impostate durante l'installazione di SQL Server e diventano predefinite anche per i database di sistema. Si noti che le regole di confronto solo Unicode non possono essere selezionate durante l'installazione di SQL Server, perché non sono supportate come regole di confronto a livello server.

    Dopo l'assegnazione delle regole di confronto a un oggetto, ad eccezione delle colonne e dei database, non è possibile modificare le regole di confronto se non eliminando e creando di nuovo l'oggetto. Anziché modificare le regole di confronto predefinite di un'istanza di SQL Server, è possibile specificarle al momento della creazione di nuovi database o colonne di database.

    Per eseguire una query sulle regole di confronto del server per un'istanza di SQL Server, utilizzare la funzione Transact-SQL SERVERPROPERTY seguente:

    SELECT CONVERT (varchar, SERVERPROPERTY('collation'))
    

    Per eseguire una query sul server per tutte le regole di confronto disponibili, utilizzare la funzione predefinita fn_helpcollations() seguente:

    SELECT * from ::fn_helpcollations()
    
  • Regole di confronto a livello di database
    Quando si crea un database, è possibile utilizzare la clausola COLLATE dell'istruzione CREATE DATABASE per specificare regole di confronto predefinite del database. Se non si specificano regole di confronto, al database verranno assegnate le regole di confronto predefinite del database modello. Le regole di confronto per il database modello sono uguali alle regole di confronto predefinite dell'istanza di SQL Server.

    È possibile modificare le regole di confronto di un database utente utilizzando un'istruzione ALTER DATABASE simile alla seguente:

    ALTER DATABASE myDB COLLATE Greek_CS_AI
    

    È possibile recuperare le regole di confronto correnti di un database utilizzando un'istruzione simile alla seguente:

    SELECT CONVERT (varchar, DATABASEPROPERTYEX('database_name','collation'))
    

    [!NOTA]

    Le modifiche apportate alle regole di confronto a livello di database non influiscono sulle regole di confronto a livello di colonna o di espressione.

  • Regole di confronto a livello di colonna
    Quando si crea una tabella, è possibile specificare regole di confronto per ogni colonna di stringhe di caratteri utilizzando la clausola COLLATE dell'istruzione CREATE TABLE. Se non si specificano regole di confronto, alla colonna verranno assegnate le regole di confronto predefinite del database.

    È possibile modificare le regole di confronto di una colonna utilizzando un'istruzione ALTER TABLE simile alla seguente:

    ALTER TABLE myTable ALTER COLUMN mycol NVARCHAR(10) COLLATE Greek_CS_AI
    
  • Regole di confronto a livello di espressione
    Le regole di confronto a livello di espressione vengono impostate al momento dell'esecuzione di un'istruzione e interessano la modalità di restituzione di un set di risultati. In questo modo i risultati dell'ordinamento ORDER BY possono essere specifici delle impostazioni locali. Per implementare regole di confronto a livello di espressione, utilizzare una clausola COLLATE simile alla seguente:

    SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI
    

Torna all'inizio

Impostazioni locali

Le impostazioni locali rappresentano un set di informazioni associate a un paese o una lingua. Possono includere il nome e l'identificatore della lingua parlata, lo script utilizzato per la scrittura della lingua e le convenzioni culturali. Le regole di confronto possono essere associate a uno o più set di impostazioni locali.

Torna all'inizio

Unicode

Se si archiviano dati di tipo carattere che riflettono più lingue, utilizzare sempre tipi di dati Unicode (nchar, nvarchar e ntext) anziché tipi di dati non Unicode (char, varchar e text).

Ai tipi di dati non Unicode sono associate numerose limitazioni, in quanto nei computer non Unicode sarà disponibile una sola tabella codici. Utilizzando tipi di dati Unicode è possibile ottenere prestazioni migliori, in quanto è necessario un minor numero di conversioni tramite la tabella codici. Le regole di confronto Unicode devono essere selezionate singolarmente a livello di database, di colonna o di espressione perché non sono supportate a livello di server.

Le tabelle codici utilizzate da un client vengono determinate in base alle impostazioni del sistema operativo. Per impostare le tabelle codici del client nei sistemi operativi Windows 2000, Windows XP, Windows Server 2003 o Windows Server 2008, utilizzare l'opzione Impostazioni internazionali del Pannello di controllo.

Quando si spostano dati da un server a un client, le regole di confronto del server potrebbero non essere riconosciute dai driver client meno recenti. Questa situazione può verificarsi quando si spostano dati da un server Unicode a un client non Unicode. La migliore opzione potrebbe consistere nell'aggiornare il sistema operativo client affinché vengano aggiornate le regole di confronto del sistema sottostanti. Se nel client è installato software client del database, è possibile applicare un aggiornamento dei servizi a tale software.

È inoltre possibile tentare di utilizzare regole di confronto diverse per i dati nel server. Scegliere regole di confronto mappate a una tabella codici nel client. Per ulteriori informazioni, vedere l'argomento "Impostazione e modifica di regole di confronto" nella documentazione in linea di SQL Server.

Per valutare i problemi relativi all'utilizzo di tipi di dati Unicode o non Unicode, è necessario eseguire il test dello scenario per verificare le differenze di prestazioni nell'ambiente specifico. È consigliabile standardizzare le regole di confronto utilizzate nei sistemi nell'organizzazione, quindi distribuire server e client Unicode laddove possibile. Per ulteriori informazioni su Unicode, visitare il sito Web Unicode Consortium.

In molti casi, SQL Server interagirà con altri server o client e l'organizzazione può utilizzare più standard di accesso ai dati tra applicazioni e istanze del server. I client di SQL Server sono di due tipi principali:

  • Client Unicode che utilizzano OLE DB e ODBC (Open Database Connectivity) versione 3.7 o versioni successive.

  • Client non Unicode che utilizzano DB-Library e ODBC versione 3.6 o versioni precedenti.

Nella tabella seguente sono incluse informazioni sull'utilizzo di dati multilingue con diverse combinazioni di server Unicode e non Unicode.

Server

Client

Vantaggi o limitazioni

Unicode

Unicode

Poiché i dati Unicode verranno utilizzati in tutto il sistema, questo scenario fornisce prestazioni ottimali e la migliore protezione da eventuali danni ai dati recuperati. Questa configurazione utilizza ADO (ActiveX Data Objects), OLE DB e ODBC versione 3.7 o versioni successive.

Unicode

Non Unicode

In questo scenario, in particolare con le connessioni tra un server in cui è in esecuzione un sistema operativo più recente e un client in cui è in esecuzione una versione precedente di SQL Server o di un sistema operativo, possono riscontrarsi limitazioni o errori quando si spostano i dati in un computer client. Per convertire i dati, verrà tentato il mapping tra i dati Unicode presenti sul server e una tabella codici corrispondente sul client non Unicode.

Non Unicode

Unicode

Non si tratta di una configurazione ideale per l'utilizzo di dati multilingue. Non sarà possibile scrivere dati Unicode nel server non Unicode e potrebbero verificarsi problemi all'invio dei dati ai server che non rientrano nella tabella codici del server.

Non Unicode

Non Unicode

Si tratta di uno scenario che presenta numerose limitazioni per i dati multilingue. È possibile utilizzare solo una tabella codici.

Se si verificano errori o difficoltà quando si spostano i dati da un server a un client, in particolare da un server Unicode a un client non Unicode, è possibile che le regole di confronto del server non vengano riconosciute dai driver client meno recenti. In questo caso, la migliore opzione potrebbe consistere nell'aggiornare il sistema operativo client affinché vengano aggiornate le regole di confronto del sistema sottostanti. Se nel client è installato software client del database, è possibile applicare un aggiornamento dei servizi a tale software.

È inoltre possibile tentare di utilizzare regole di confronto diverse per i dati nel server. Scegliere regole di confronto mappate a una tabella codici nel client. Per ulteriori informazioni sulla modifica delle regole di confronto, vedere l'argomento "Impostazione e modifica di regole di confronto" in SQL Server nella documentazione in linea di SQL Server. Per ulteriori informazioni sulla modifica delle regole di confronto, vedere il white paper"SQL Server Best Practices Collation Change". Per ulteriori informazioni sulla migrazione dei tipi di dati non Unicode a Unicode, vedere il white paper"SQL Server Best Practices Migration to Unicode".

Argomenti correlati:Nozioni fondamentali su Unicode.

Torna all'inizio

Tabella codici

Una tabella codici è un set ordinato di caratteri di uno script specifico nel quale a ogni carattere viene associato un indice numerico o un valore di punto di codice. Per tabella codici di Windows si intende in genere un set di caratteri o charset. Queste tabelle vengono utilizzate per supportare i set di caratteri e i layout di tastiera impiegati per le diverse impostazioni locali di Windows.

Tutte le regole di confronto Unicode di Windows Server 2008 sono basate su Unicode 5.0.

Torna all'inizio

Tipi di dati

Il tipo di dati è una definizione che specifica un intervallo di valori, le operazioni che è possibile eseguire sui valori e la modalità di archiviazione dei valori nella memoria. La definizione dei tipi di dati consente la modifica dei dati in base a modalità prevedibili in SQL Server. I tipi di dati carattere non Unicode sono char, varchar e text. I tipi di dati Unicode sono nchar, nvarchar e ntext. È consigliabile utilizzare tipi di dati Unicode nelle applicazioni, specialmente se si archiviano dati di tipo carattere che riflettono più lingue.

Per ulteriori informazioni sulla migrazione dei tipi di dati non Unicode a Unicode, vedere il white paper"SQL Server Best Practices Migration to Unicode".

Argomenti correlati:Tipi di dati (Motore di database), Tipi di dati (Transact-SQL), Tipi di dati di Integration Services

Torna all'inizio

Ordinamento

L'ordinamento specifica il modo in cui vengano ordinati i valori dei dati e influisce sui risultati del confronto dei dati stessi. I dati vengono ordinati tramite regole di confronto e possono essere ottimizzati tramite indici.

Argomenti correlati:Stili di ordinamento delle regole di confronto di Windows, Indici

Torna all'inizio

Vedere anche

Riferimento