Respuestas:
Así es como lo haría:
Para esquemas (o bases de datos, son sinónimos):
SELECT default_character_set_name FROM information_schema.SCHEMATA
WHERE schema_name = "schemaname";
Para tablas:
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";
Para columnas:
SELECT character_set_name FROM information_schema.`COLUMNS`
WHERE table_schema = "schemaname"
AND table_name = "tablename"
AND column_name = "columnname";
schemaname
puede ser el nombre de la base de datos.
Para columnas :
SHOW FULL COLUMNS FROM table_name;
latin1_swedish_ci
, el conjunto de caracteres no puede ser otra cosa además latin1
. Si la recopilación es utf8mb4_general_ci
, el juego de caracteres no puede ser otra cosa además utf8mb4
.
Para bases de datos :
USE your_database_name;
show variables like "character_set_database";
-- or:
-- show variables like "collation_database";
Cf. esta página . Y mira el manual de MySQL
Para todas las bases de datos que tiene en el servidor:
mysql> SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;
Salida:
+----------------------------+---------+--------------------+
| database | charset | collation |
+----------------------------+---------+--------------------+
| information_schema | utf8 | utf8_general_ci |
| my_database | latin1 | latin1_swedish_ci |
...
+----------------------------+---------+--------------------+
Para una sola base de datos :
mysql> USE my_database;
mysql> show variables like "character_set_database";
Salida:
+----------------------------+---------+
| Variable_name | Value |
+----------------------------+---------+
| character_set_database | latin1 |
+----------------------------+---------+
Obteniendo la clasificación para las tablas :
mysql> USE my_database;
mysql> SHOW TABLE STATUS WHERE NAME LIKE 'my_tablename';
O: generará el SQL completo para crear la tabla:
mysql> show create table my_tablename
Obteniendo la colación de columnas :
mysql> SHOW FULL COLUMNS FROM my_tablename;
salida:
+---------+--------------+--------------------+ ....
| field | type | collation |
+---------+--------------+--------------------+ ....
| id | int(10) | (NULL) |
| key | varchar(255) | latin1_swedish_ci |
| value | varchar(255) | latin1_swedish_ci |
+---------+--------------+--------------------+ ....
type
? Tengo mysql 5.7.9 y type
muestro el data type
de la columna, no el character set
. A algunos les gusta int(10)
varchar(255)
... etc. y noutf8
type
como data type
@MTK, tal vez arriba es un error de copiar y pegar en la sección "salida:".
Para mesas :
SHOW TABLE STATUS
enumerará todas las tablas.
Filtrar usando:
SHOW TABLE STATUS where name like 'table_123';
Para bases de datos :
Solo usa estos comandos:
USE db_name;
SELECT @@character_set_database;
-- or:
-- SELECT @@collation_database;
SELECCIONE TABLE_SCHEMA, NOMBRE DE LA TABLA, CCSA.CHARACTER_SET_NAME COMO DEFAULT_CHAR_SET, COLUMN_NAME COLUMN_TYPE, C.CHARACTER_SET_NAME DE information_schema.TABLES AS T ÚNETE a information_schema.COLUMNS COMO C USING (TABLE_SCHEMA, TABLE_NAME) ÚNETE a information_schema.COLLATION_CHARACTER_SET_APPLICABILITY AS CCSA ON (T.TABLE_COLLATION = CCSA.COLLATION_NAME) WHERE TABLE_SCHEMA = SCHEMA () Y C.DATA_TYPE IN ('enum', 'varchar', 'char', 'text', 'mediumtext', 'longtext') ORDENAR POR TABLE_SCHEMA, NOMBRE DE LA TABLA, COLUMN_NAME ;
Siempre solo miro SHOW CREATE TABLE mydatabase.mytable
.
Para la base de datos, parece que debe mirar SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA
.
select default_character_set_name from information_schema.schemata
no es suficiente porque no puede decir qué fila se correlaciona con qué base de datos. Utilizar select default_character_set_name,schema_name from information_schema.schemata
o simplemente: select*from information_schema.schemata
.
SELECT * FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '<database-name>' \G;
y funcionó genial :) ¡Gracias!
Para ver la clasificación predeterminada de la base de datos:
USE db_name;
SELECT @@character_set_database, @@collation_database;
Para ver la clasificación de la tabla:
SHOW TABLE STATUS where name like 'table_name';
Para ver la clasificación de las columnas:
SHOW FULL COLUMNS FROM table_name;
Para tablas y columnas :
show create table your_table_name
Para bases de datos :
SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;
Salida de ejemplo:
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>
Para bases de datos :
SHOW CREATE DATABASE "DB_NAME_HERE";
Al crear una base de datos (MySQL), el conjunto de caracteres / clasificación predeterminados siempre es LATINO, en lugar de que haya seleccionado uno diferente al crear inicialmente su base de datos
latin1_swedish_ci
debe a que Monty Widenius, el creador de MySQL, es sueco y no estaba pensando en Big Picture como debería tener cuando comenzó.
Como muchos escribieron anteriormente, SHOW FULL COLUMNS debería ser el método preferido para obtener información de la columna. Lo que falta es una forma de obtener charset después de eso sin llegar directamente a las tablas de metadatos:
SHOW FULL COLUMNS FROM my_table WHERE Field = 'my_field'
SHOW COLLATION WHERE Collation = 'collation_you_got'
SHOW CREATE TABLE
, como se discutió en stackoverflow.com/questions/57628217/…