Réponses:
Voici comment je le ferais -
Pour les schémas (ou bases de données - ce sont des synonymes):
SELECT default_character_set_name FROM information_schema.SCHEMATA
WHERE schema_name = "schemaname";
Pour les tableaux:
SELECT CCSA.character_set_name FROM information_schema.`TABLES` T,
information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
WHERE CCSA.collation_name = T.table_collation
AND T.table_schema = "schemaname"
AND T.table_name = "tablename";
Pour les colonnes:
SELECT character_set_name FROM information_schema.`COLUMNS`
WHERE table_schema = "schemaname"
AND table_name = "tablename"
AND column_name = "columnname";
schemaname
peut simplement être le nom de la base de données.
Pour les colonnes :
SHOW FULL COLUMNS FROM table_name;
latin1_swedish_ci
, le jeu de caractères ne peut pas être autre chose latin1
. Si le classement est utf8mb4_general_ci
, le jeu de caractères ne peut pas être autre chose utf8mb4
.
Pour les bases de données :
USE your_database_name;
show variables like "character_set_database";
-- or:
-- show variables like "collation_database";
Cf. cette page . Et consultez le manuel MySQL
Pour toutes les bases de données que vous avez sur le serveur:
mysql> SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;
Production:
+----------------------------+---------+--------------------+
| database | charset | collation |
+----------------------------+---------+--------------------+
| information_schema | utf8 | utf8_general_ci |
| my_database | latin1 | latin1_swedish_ci |
...
+----------------------------+---------+--------------------+
Pour une seule base de données :
mysql> USE my_database;
mysql> show variables like "character_set_database";
Production:
+----------------------------+---------+
| Variable_name | Value |
+----------------------------+---------+
| character_set_database | latin1 |
+----------------------------+---------+
Obtention du classement des tableaux :
mysql> USE my_database;
mysql> SHOW TABLE STATUS WHERE NAME LIKE 'my_tablename';
OU - affichera le SQL complet pour la table de création:
mysql> show create table my_tablename
Obtenir le classement des colonnes :
mysql> SHOW FULL COLUMNS FROM my_tablename;
production:
+---------+--------------+--------------------+ ....
| field | type | collation |
+---------+--------------+--------------------+ ....
| id | int(10) | (NULL) |
| key | varchar(255) | latin1_swedish_ci |
| value | varchar(255) | latin1_swedish_ci |
+---------+--------------+--------------------+ ....
type
? J'ai mysql 5.7.9 et type
montre le data type
de la colonne pas le character set
. Certains aiment int(10)
varchar(255)
... etc et pasutf8
type
aussi le data type
@MTK, peut-être au-dessus est une erreur de copier-coller dans la section "sortie:".
Pour les tableaux :
SHOW TABLE STATUS
listera toutes les tables.
Filtrer en utilisant:
SHOW TABLE STATUS where name like 'table_123';
SELECT TABLE_SCHEMA, NOM DE LA TABLE, CCSA.CHARACTER_SET_NAME AS DEFAULT_CHAR_SET, NOM DE COLONNE, COLUMN_TYPE, C.CHARACTER_SET_NAME FROM information_schema.TABLES AS T JOIGNEZ information_schema.COLUMNS COMME C UTILISATION (TABLE_SCHEMA, TABLE_NAME) REJOIGNEZ information_schema.COLLATION_CHARACTER_SET_APPLICABILITY AS CCSA ON (T.TABLE_COLLATION = CCSA.COLLATION_NAME) O TABLE TABLE_SCHEMA = SCHEMA () AND C.DATA_TYPE IN ('enum', 'varchar', 'char', 'text', 'mediumtext', 'longtext') COMMANDER PAR TABLE_SCHEMA, NOM DE LA TABLE, NOM DE COLONNE ;
Je regarde toujours SHOW CREATE TABLE mydatabase.mytable
.
Pour la base de données, il semble que vous devez regarder SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA
.
select default_character_set_name from information_schema.schemata
n'est pas suffisant car vous ne pouvez pas savoir quelle ligne est en corrélation avec quelle base de données. Utilisez select default_character_set_name,schema_name from information_schema.schemata
ou simplement: select*from information_schema.schemata
.
SELECT * FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '<database-name>' \G;
Et cela a très bien fonctionné :) Merci!
Pour voir le classement par défaut de la base de données:
USE db_name;
SELECT @@character_set_database, @@collation_database;
Pour voir le classement du tableau:
SHOW TABLE STATUS where name like 'table_name';
Pour voir le classement des colonnes:
SHOW FULL COLUMNS FROM table_name;
Pour les tableaux et les colonnes :
show create table your_table_name
Pour les bases de données :
SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;
Exemple de sortie:
mysql> SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;
+----------------------------+---------+--------------------+
| database | charset | collation |
+----------------------------+---------+--------------------+
| information_schema | utf8 | utf8_general_ci |
| drupal_demo1 | utf8 | utf8_general_ci |
| drupal_demo2 | utf8 | utf8_general_ci |
| drupal_demo3 | utf8 | utf8_general_ci |
| drupal_demo4 | utf8 | utf8_general_ci |
| drupal_demo5 | latin1 | latin1_swedish_ci |
...
+----------------------------+---------+--------------------+
55 rows in set (0.00 sec)
mysql>
Pour les bases de données :
SHOW CREATE DATABASE "DB_NAME_HERE";
Lors de la création d'une base de données (MySQL), le jeu de caractères / classement par défaut est toujours LATIN, à la place que vous en avez sélectionné un autre lors de la création initiale de votre base de données
latin1_swedish_ci
dû au fait que Monty Widenius, le créateur de MySQL, est suédois et ne pensait pas autant qu'il devrait avoir quand il a commencé.
Comme beaucoup l'ont écrit précédemment, SHOW FULL COLUMNS devrait être la méthode préférée pour obtenir des informations sur les colonnes. Ce qui manque, c'est un moyen d'obtenir le jeu de caractères après cela sans atteindre directement les tables de métadonnées:
SHOW FULL COLUMNS FROM my_table WHERE Field = 'my_field'
SHOW COLLATION WHERE Collation = 'collation_you_got'
SHOW CREATE TABLE
, comme indiqué dans stackoverflow.com/questions/57628217/…