angelo.pezzullo
pubblicato più di 3 anni fa

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:

  1. Due caracter set differenti non possono avere la stessa collation;
  2. 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;
  3. 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:

  • Current rating: 0.0/5
  • 1
  • 2
  • 3
  • 4
  • 5

Argomenti chiave:

Ultimi commenti Ultimi commenti

Esegui il Login oppure registrati per scrivere un commento.
Cerca nel sito...
Ultime recipes

Un utilissimo tool di shell che effettua un dettagliato e comodo report su MySQL MySQL Report un tool di shell per tenere tutto sotto controllo

Un utilissimo tool di shell che effettua un dettagliato e comodo report su MySQL


Vai alla recipe

Un utilissimo tool per sniffare il traffico Client/Server TCP/IP di MySQL MySQLSniffer sniffare il traffico TCP di MySQL

Un utilissimo tool per sniffare il traffico Client/Server TCP/IP di MySQL


Vai alla recipe

Verificare l'integrità, riparare gestire chiavi e memoria di tabelle MyISAM attraverso myisamchk riparare file MyISAM

Verificare l'integrità, riparare gestire chiavi e memoria di tabelle MyISAM attraverso il file myisamchk


Vai alla recipe

Un tool per comprimere le tabelle MyISAM fino a oltre il 50% myisampack comprimere file MyISAM

Un tool per comprimere le tabelle MyISAM fino a oltre il 50%


Vai alla recipe

mysqlshow le info di base sui database, tabelle e colonne senza utilizzare alcun mysqlshow visualizzare le informazioni sul database MySQL

mysqlshow le info di base sui database, tabelle e colonne senza utilizzare alcun client


Vai alla recipe

Utilizzando UNION / UNION ALL su campi int unsigned zerofill,
ho notato che MysqlUNION / UNION ALL su campi int unsigned zerofill. di DebUsr
Vai al tip

Utilizzo di funzioni come alias di campo tramite l'impiego di prepared statementReport con alias di campo dinamici di john_revelator
Vai al tip

Può capitare che sia necessario eseguire un dump di database in formato Comma SeparatedEsecuzione dump in formato CSV (tabelle in engine MyIsam esportate in formato CSV) di ghigomatto
Vai al tip

E' possibile eseguire le query SQL contenute in un file di testo. Questo è utileEseguire le query da un file di testo di Sante Caserio
Vai al tip

Se vogliamo fare il backup di tutti i database con mysqldump, e ne abbiamo parecchiFare il backup di tutti i database di Sante Caserio
Vai al tip

Salve, dopo tante storie ho studiato il php e mysql .. . che in questo forum parlavo php e campo mysql timestamp di gigi Vai al topic

ciao a tutti ho creato un forum su aruba ma non so come farlo visualizzare nel mio aruba di albertodiprima Vai al topic

Salve a tutti gente, questo è il mio primo post su questo forum e questo a causa Problema Gravissimo con AutoIncrement di stefanoadsl Vai al topic

Salve! Mi presento, mi chiamo Adriano e sono uno studente di ingegneria informatica Problema Trigger di Xanakro Vai al topic

Ciao a tutti!
Volevo chiedere una informazione.
Ho una query che lanciata la prima Query Eseguita più volte di OltreLeStelle Vai al topic