Commenti(0)
Creare e Modificare il database con MySQL
L’articolo descrive le istruzioni per creare e modificare un database con MySQL. In particolare si fa riferimento ai character set dei database e alle collation a essi associati.
Creare il Database
Dalla console di mysql, l’istruzione per creare un nuovo database è la seguente:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS]
db_name
[create_specification [create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
| [DEFAULT] COLLATE collation_name
L’istruzione CREATE DATABASE crea un nuovo database dato il nome (db_name). Per usare questa istruzione l’utente dovrà avere i privilegi di “creazione” di un nuovo database. L’istruzione CREATE SCHEMA è equivalente a CREATE DATABASE dalla versione di MySQL 5.0.2 e superiori.
MySQL restituisce un errore se il database che si sta per creare già esiste e non viene specificata la clausola IF NOT EXISTS.
Le opzioni definite dall’istruzione create_specification definiscono le caratteristiche del database. Le caratteristiche di un database MySQL sono registrate all’interno del file db.opt nella directory del database.
La clausola CHARACTER SET se usata serve a definire il “character set” del database che stiamo creando.
La clausola COLLATE se usata serve a definire la “collate” del database che stiamo creando.
Character Set e Collate
Un “character set” è un insieme di simboli e di codifiche, mentre una “collate” è un insieme di regole per la comparazione dei simboli all’interno di un “character set”.
Supponiamo di avere un alfabeto con quattro simboli: £, #, &, $, e di associare ad ogni simbolo un numero: £ = 0, # = 1, & = 2, $ = 3. Gli elementi £, #, &, $, sono i simboli dell’alfabeto, i numeri 0,1,2,3 rappresentano le codifiche associate ai simboli dell’alfabeto e la combinazione dei simboli e delle codifiche dell’alfabeto definisce il “character set”.
Supponiamo ora, una volta definito l’alfabeto con i suoi simboli, di voler comparare due stringhe: #£ e &$.
Una regola semplice potrebbe essere la seguente, facendo riferimento alle codifiche sopra definite:
- #£ = 10
- &$ = 23
- 10 < 23
- #£ < &$
Quello che abbiamo appena fatto è applicare una collation al character set. La collation è un insieme di regole (una nell’esempio precedente) al character set. Tuttavia nella realtà i character set hanno molti simboli e le collation sono costituite da un isieme discreto di regole.
MySQL server supporta multipli character set, la seguente istruzione:
SHOW CHARACTER SET
mostra la lista dei character set disponibili:
mysql> SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+--------+ | Charset | Description | Default collation | Maxlen | +----------+-----------------------------+---------------------+--------+ | big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 | | dec8 | DEC West European | dec8_swedish_ci | 1 | | cp850 | DOS West European | cp850_general_ci | 1 | | hp8 | HP West European | hp8_english_ci | 1 | | koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 | | latin1 | cp1252 West European | latin1_swedish_ci | 1 | | latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 | | swe7 | 7bit Swedish | swe7_swedish_ci | 1 | | ascii | US ASCII | ascii_general_ci | 1 | | ujis | EUC-JP Japanese | ujis_japanese_ci | 3 | | sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 | | hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 | | tis620 | TIS620 Thai | tis620_thai_ci | 1 | | euckr | EUC-KR Korean | euckr_korean_ci | 2 | | koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 | | gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 | | greek | ISO 8859-7 Greek | greek_general_ci | 1 | | cp1250 | Windows Central European | cp1250_general_ci | 1 | | gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 | | latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 | ...
Un dato character set prevede sempre al meno una collation associata ad esso, ma possono esserci più collation associate allo stesso character set. La seguente istruzione mostra la lista delle collation associate ad un determinato character set:
mysql> SHOW COLLATION LIKE ‘latin1%’;
+---------------------+---------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +---------------------+---------+----+---------+----------+---------+ | latin1_german1_ci | latin1 | 5 | | | 0 | | latin1_swedish_ci | latin1 | 8 | Yes | Yes | 1 | | latin1_danish_ci | latin1 | 15 | | | 0 | | latin1_german2_ci | latin1 | 31 | | Yes | 2 | | latin1_bin | latin1 | 47 | | Yes | 1 | | latin1_general_ci | latin1 | 48 | | | 0 | | latin1_general_cs | latin1 | 49 | | | 0 | | latin1_spanish_ci | latin1 | 94 | | | 0 | +---------------------+---------+----+---------+----------+---------+
Le caratteristiche generali delle collation sono le seguenti:
- Due caracter set differenti non possono avere la stessa collation;
- Ogni character set ha una sola collation che rappresenta la cosiddetta default collation, l’output dell’istruzione SHOW CHARACTER SET riporta la collation di default associata ad ogni character set mostrato;
- Esiste una convenzione per i nomi delle collaction. Ogni collation inizia con il nome del character set al quale è associato, include il linguaggio (italian, english, ecc.) e termina con _CS (case sensitive), _CI (case insensitive) o _BIN (binary);
Modificare il Database
La modifica di un database esistente, in MySQL viene gestita con la seguente istruzione:
ALTER {DATABASE | SCHEMA} [db_name] alter_specification [alter_specification] ... alter_specification: [DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name
L’istruzione ALTER DATABASE modifica le caratteristiche generali di un database. Per poter utilizzare questa istruzione, l’utente deve avere impostati i privilegi di ALTER sul database. ALTER DATABASE è equivalente a ALTER SCHEMA dalla versione di MySQL 5.0.2 e superiori.
La clausola CHARACTER SET cambia il default character set del database, allo stesso modo la clausola COLLATE camba la collaction di default del database. Il nome del database può essere omesso, in tal caso l’istruzione farà riferimento al database di default.
Condividi su:
Esprimi un voto:
Argomenti chiave:

MySQL Report un tool di shell per tenere tutto sotto controllo