Newsgroup: it.comp.software.database
Titolo: Ordinamento alfabetico: lettera "e accentata" che viene dopo la "z" ?

Perchè nei campi carattere (*), con character set WIN1251 o ISO8859_1, la 
lettera "è" ("e accentata") viene dopo la lettera "z" ?
Non sarebbe più naturale che la "e accentata" venisse immediatamente dopo la 
lettera "e" ?
Non c'è modo di correggere il problema?
E' giusto utilizzare quei character set per la lingua italiana?
(*) database IB/FB, campo VARCHAR
-- 
Mauro Falzari 
   [ 
http://digilander.libero.it/mauro.falzari
 ]
 
 "Se guardi nell'abisso, anche l'abisso guarda in te." 
   (Friedrich Nietzsche)

 (*) database IB/FB, campo VARCHAR
In Oracle dipende da quale lingua hai impostato in quel momento:
Linguistic Sort Examples
The examples in this section demonstrate a binary sort, a monolingual
sort, and a multilingual sort. To prepare for the examples, create and
populate a table called test. Enter the following statements:
SQL> CREATE TABLE test (name VARCHAR2(20));
SQL> INSERT INTO test VALUES('Diet');
SQL> INSERT INTO test VALUES('À voir');
SQL> INSERT INTO test VALUES('Freizeit');
Example 4-1 Binary Sort
The ORDER BY clause uses a binary sort.
SQL> SELECT * FROM test ORDER BY name;
You should see the following output:
Diet
Freizeit
À voir
Note that a binary sort results in À voir being at the end of the
list.
Example 4-2 Monolingual German Sort
Use the NLSSORT function with the NLS_SORT parameter set to german to
obtain a German sort.
SQL> SELECT * FROM test ORDER BY NLSSORT(name, 'NLS_SORT=german');
You should see the following output:
À voir
Diet
Freizeit
Note that À voir is at the beginning of the list in a German sort.
tratto da:
http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96529/toc.htm
Ni hao, Lelle.

 In Oracle dipende da quale lingua hai impostato in quel momento:
IB/FB = Interbase/Firebird :-)
ciao e grazie lo stesso


E' giusto utilizzare quei character set per la lingua italiana?
si.
ciao
-- 
Seti@Home Java Applets
http://maruko.webhop.net/

 non basta il charset, devi impostare il collate per l'italiano
vista la tua dritta, sono andato a guardarmi "Chapter 8 - Character Sets and
Collation Orders", cosě e ho trovato che per il character set ISO8859_1, esiste un collation 
order IT_IT (presumo sia l'italiano).
Ho applicato le modifiche al db, ma il problema permane (le righe inizianti ad esempio per "e 
accentata" vengono ancora dopo le righe inizianti per "z" - ma almeno le "e accentate" vengono 
prima delle "o accentate").
Il db č creato con questi parametri:
  USER 'SYSDBA'
  PASSWORD 'masterkey'
  PAGE_SIZE=4096
  DEFAULT CHARACTER SET ISO8859_1
poi un dominio:
CREATE DOMAIN DESCRIPTION_DOM AS
  VARCHAR(700) NOT NULL
  COLLATE IT_IT
infine una tabella:
CREATE TABLE DESCRIPTIONS (
  ID           INTEGER         NOT NULL    PRIMARY KEY,
  TEXT         DESCRIPTION_DOM)
Per vedere i dati (da un'applicazione Delphi) uso poi un DataSet che fa uso di questa query:
select *  from DESCRIPTIONS order by TEXT COLLATE IT_IT



Ho fatto una rapida prova da ibexpert e l'ordinamento me lo fa giusto.
Anzi, se ho gia' specificato il collate per il campo, non devo
rispecificarlo nella query.
Non conosco Delphi e quindi non so dirti se ci sia qualche menata a
livello di quel linguaggio.


 rispecificarlo nella query.
hai ragione, il problema non stava nel RDMS ma nei "divoratori di dati" 
dell'applicazione. (*)
Ho fatto una prova con dei componenti il più semplici possibili ed 
effettivamente l'ordinamento è corretto, inoltre se si specifica il collation 
order (COLLATE IT_IT) nel dominio, non è necessario ripeterlo nella query, 
come avevi osservato anche tu.
(*) una griglia data-aware con centinaia di proprietà, tra cui ce n'era una 
da settare per avere l'ordinamento ANSI
