MariaDB
 sql >> Database >  >> RDS >> MariaDB

Mostra la raccolta in MariaDB

In MariaDB, le regole di confronto possono essere applicate a molti livelli. Le regole di confronto possono essere applicate a livello di server, di connessione, di database, di tabella e persino a livello di colonna.

È anche possibile specificare un confronto a livello di query, in modo che sostituisca qualsiasi confronto applicato a livello di database, tabella o colonna.

MariaDB fornisce una serie di opzioni per la restituzione delle regole di confronto ai vari livelli.

Mostra la connessione, il server e il database di confronto

Possiamo usare SHOW VARIABLES dichiarazione amministrativa con il LIKE clausola per restituire variabili che includono una determinata stringa all'interno dei loro nomi.

Esempio:

SHOW VARIABLES LIKE 'collation%';

Esempio di risultato:

+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8_general_ci    |
| collation_database   | utf8mb4_general_ci |
| collation_server     | utf8mb4_general_ci |
+----------------------+--------------------+

Questi sono i risultati che ottengo nel mio ambiente di test. Il risultato che otterrai dipenderà dalle tue impostazioni.

Ognuna di queste variabili separate può essere restituita separatamente, se necessario (vedi sotto).

Per impostazione predefinita, SHOW VARIABLES mostra la SESSION variabili. In questo caso, restituisce i valori in vigore per la connessione corrente.

Pertanto, l'esempio precedente potrebbe essere riscritto come segue:

SHOW SESSION VARIABLES LIKE 'collation%';

Esempio di risultato:

+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8_general_ci    |
| collation_database   | utf8mb4_general_ci |
| collation_server     | utf8mb4_general_ci |
+----------------------+--------------------+

In alternativa, puoi sostituire SESSION con LOCAL (che è sinonimo di SESSION ):

SHOW LOCAL VARIABLES LIKE 'collation%';

Puoi anche usare il GLOBAL modificatore per visualizzare i valori utilizzati per le nuove connessioni a MariaDB.

Esempio:

SHOW GLOBAL VARIABLES LIKE 'collation%';

Esempio di risultato:

+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database   | utf8mb4_general_ci |
| collation_server     | utf8mb4_general_ci |
+----------------------+--------------------+

Confronto server

Il comando seguente restituisce le regole di confronto predefinite del server:

SELECT @@collation_server;

Esempio di risultato:

+--------------------+
| @@collation_server |
+--------------------+
| utf8mb4_general_ci |
+--------------------+

Confronto a livello di connessione

Quando si esegue una query su un database MariaDB, MariaDB utilizza una serie di variabili di sistema per determinare quale set di caratteri e regole di confronto utilizzare ogni volta che vengono eseguite le query. Se il client utilizza un set di caratteri diverso dal server, MariaDB può tradurlo in un set di caratteri e regole di confronto appropriati.

Quando si inviano i risultati della query al client, MariaDB può tradurre questi risultati in un set di caratteri completamente diverso, se necessario. MariaDB utilizza le variabili di sistema per determinare quali set di caratteri e regole di confronto utilizzare in ciascuno di questi passaggi.

Quanto segue individua le regole di confronto delle connessioni (puoi usare la stessa sintassi per qualsiasi variabile di sistema):

SELECT @@collation_connection;

Esempio di risultato:

+------------------------+
| @@collation_connection |
+------------------------+
| utf8_general_ci        |
+------------------------+

Puoi anche restituire tutte le variabili di sistema del set di caratteri con la seguente query:

SHOW VARIABLES LIKE 'character_set%';

Risultato:

+--------------------------+--------------------------------------------------------+
| Variable_name            | Value                                                  |
+--------------------------+--------------------------------------------------------+
| character_set_client     | utf8                                                   |
| character_set_connection | utf8                                                   |
| character_set_database   | utf8mb4                                                |
| character_set_filesystem | binary                                                 |
| character_set_results    | utf8                                                   |
| character_set_server     | utf8mb4                                                |
| character_set_system     | utf8                                                   |
| character_sets_dir       | /usr/local/Cellar/mariadb/10.5.9/share/mysql/charsets/ |
+--------------------------+--------------------------------------------------------+

Confronto a livello di database

La seguente istruzione può essere utilizzata per verificare le regole di confronto di un determinato database:

USE PetHouse;
SELECT @@character_set_database, @@collation_database;

Esempio di risultato:

+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8mb4                  | utf8mb4_general_ci   |
+--------------------------+----------------------+

Un altro modo per farlo è usare un'istruzione come questa:

SELECT 
    default_character_set_name, 
    default_collation_name 
FROM information_schema.schemata 
WHERE schema_name = 'PetHouse';

Esempio di risultato:

+----------------------------+------------------------+
| default_character_set_name | default_collation_name |
+----------------------------+------------------------+
| utf8mb4                    | utf8mb4_general_ci     |
+----------------------------+------------------------+

L'utilizzo di questo secondo metodo consente di ottenere i risultati senza cambiare il database.

Qui sta usando un database diverso:

SELECT 
    default_character_set_name, 
    default_collation_name 
FROM information_schema.schemata 
WHERE schema_name = 'test';

Esempio di risultato:

+----------------------------+------------------------+
| default_character_set_name | default_collation_name |
+----------------------------+------------------------+
| latin1                     | latin1_swedish_ci      |
+----------------------------+------------------------+

Questo è il database di test che è stato creato quando ho installato MariaDB per la prima volta.

Fascicolazione a livello di tabella

L'istruzione seguente restituisce un numero di colonne che forniscono informazioni su eventuali tabelle corrispondenti. Una di queste colonne è denominata Fascicolazione e fornisce le regole di confronto di tutte le tabelle corrispondenti.

SHOW TABLE STATUS LIKE '%Pets%';

Esempio di risultato (usando l'output verticale):

*************************** 1. row ***************************
            Name: Pets
          Engine: InnoDB
         Version: 10
      Row_format: Dynamic
            Rows: 8
  Avg_row_length: 2048
     Data_length: 16384
 Max_data_length: 0
    Index_length: 32768
       Data_free: 0
  Auto_increment: NULL
     Create_time: 2021-03-30 09:10:38
     Update_time: 2021-03-30 09:16:39
      Check_time: NULL
       Collation: utf8mb4_general_ci
        Checksum: NULL
  Create_options: 
         Comment: 
Max_index_length: 0
       Temporary: N

In questo caso, ho ricevuto informazioni su un tavolo chiamato Pets . Possiamo vedere che il Collation la colonna contiene utf8mb4_general_ci , che è il confronto della tabella.

Questa dichiarazione accetta anche altre clausole, come FROM , WHERE e IN , quindi questo ti offre alcune opzioni durante la creazione della tua dichiarazione.

Un altro modo per ottenere informazioni sulle regole di confronto sulle tabelle è eseguire una query su information_schema.tables :

SELECT 
    table_schema, 
    table_name, 
    table_collation 
FROM information_schema.tables 
WHERE table_schema = 'PetHouse';

Esempio di risultato:

+--------------+---------------+--------------------+
| table_schema | table_name    | table_collation    |
+--------------+---------------+--------------------+
| pethouse     | vpettypecount | NULL               |
| pethouse     | Pets          | utf8mb4_general_ci |
| pethouse     | Owners        | utf8mb4_general_ci |
| pethouse     | PetTypes      | utf8mb4_general_ci |
+--------------+---------------+--------------------+

Fascicolazione a livello di colonna

L'esecuzione della query seguente restituisce informazioni su ciascuna colonna in Pets tavolo. Ciò include le informazioni sulla raccolta.

SHOW FULL COLUMNS FROM Pets;

Esempio di risultato:

+-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| Field     | Type        | Collation          | Null | Key | Default | Extra | Privileges                      | Comment |
+-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| PetId     | int(11)     | NULL               | NO   | PRI | NULL    |       | select,insert,update,references |         |
| PetTypeId | int(11)     | NULL               | NO   | MUL | NULL    |       | select,insert,update,references |         |
| OwnerId   | int(11)     | NULL               | NO   | MUL | NULL    |       | select,insert,update,references |         |
| PetName   | varchar(60) | utf8mb4_general_ci | NO   |     | NULL    |       | select,insert,update,references |         |
| DOB       | date        | NULL               | YES  |     | NULL    |       | select,insert,update,references |         |
+-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+

In alternativa, possiamo interrogare information_schema.columns . In questo caso, possiamo scegliere solo le colonne che ci interessano:

SELECT 
    column_name, 
    character_set_name, 
    collation_name 
FROM information_schema.columns
WHERE table_name = 'Pets';

Esempio di risultato:

+-------------+--------------------+--------------------+
| column_name | character_set_name | collation_name     |
+-------------+--------------------+--------------------+
| PetId       | NULL               | NULL               |
| PetTypeId   | NULL               | NULL               |
| OwnerId     | NULL               | NULL               |
| PetName     | utf8mb4            | utf8mb4_general_ci |
| DOB         | NULL               | NULL               |
+-------------+--------------------+--------------------+

E un'altra opzione che abbiamo nel nostro toolkit è controllare il CREATE TABLE dichiarazione della nostra tavola.

In questo modo:

SHOW CREATE TABLE Pets;

Risultato:

+-------+------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
+-------+------------------------------+
| Pets  | CREATE TABLE `Pets` (
  `PetId` int(11) NOT NULL,
  `PetTypeId` int(11) NOT NULL,
  `OwnerId` int(11) NOT NULL,
  `PetName` varchar(60) NOT NULL,
  `DOB` date DEFAULT NULL,
  PRIMARY KEY (`PetId`),
  KEY `PetTypeId` (`PetTypeId`),
  KEY `OwnerId` (`OwnerId`),
  CONSTRAINT `pets_ibfk_1` FOREIGN KEY (`PetTypeId`) REFERENCES `PetTypes` (`PetTypeId`),
  CONSTRAINT `pets_ibfk_2` FOREIGN KEY (`OwnerId`) REFERENCES `Owners` (`OwnerId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-------+-------------------------------+

Tuttavia, le informazioni sul set di caratteri e sulle regole di confronto vengono restituite solo se differiscono dalle regole di confronto predefinite della tabella. In questo esempio, le informazioni sulla raccolta non differiscono e quindi non è stata restituita alcuna informazione di confronto.

Cambiamo le regole di confronto:

ALTER TABLE Pets 
MODIFY PetName VARCHAR(255) 
    CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL;

Ed esegui SHOW CREATE TABLE ancora:

SHOW CREATE TABLE Pets;

Risultato:

+-------+------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
+-------+------------------------------+
| Pets  | CREATE TABLE `Pets` (
  `PetId` int(11) NOT NULL,
  `PetTypeId` int(11) NOT NULL,
  `OwnerId` int(11) NOT NULL,
  `PetName` varchar(255) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
  `DOB` date DEFAULT NULL,
  PRIMARY KEY (`PetId`),
  KEY `PetTypeId` (`PetTypeId`),
  KEY `OwnerId` (`OwnerId`),
  CONSTRAINT `pets_ibfk_1` FOREIGN KEY (`PetTypeId`) REFERENCES `PetTypes` (`PetTypeId`),
  CONSTRAINT `pets_ibfk_2` FOREIGN KEY (`OwnerId`) REFERENCES `Owners` (`OwnerId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-------+-------------------------------+

Questa volta possiamo vedere il nuovo set di caratteri e le impostazioni di confronto rispetto a PetName colonna.