Cabe señalar que information_schema solo está en MySQL 5 en adelante, creo.
Vex
44
Por lo que puedo decir, lo más cerca que puede llegar a recuperar información específica del conjunto de caracteres de la columna en MySQL <5 es hacer MOSTRAR COLUMNAS COMPLETAS DE tableName
Robin Winslow
14
Esta respuesta fue muy útil, pero si desea solucionar un problema de character_set / collation, probablemente también deba verificar la conexión character_set, client_character_set, etc ...: MOSTRAR VARIABLES COMO 'character_set%'; MOSTRAR VARIABLES COMO 'colación%';
BenL
2
la operación de la tabla me devuelve "Conjunto vacío (0.00 seg)"
minhajul
99
Para Schema-Dummies: Tenga en cuenta que schemanamepuede ser el nombre de la base de datos.
Hola, este es el futuro hablando! Para cualquiera que verifique esta respuesta, este método solo muestra Colación, en lugar de conjunto de caracteres. Creo que esto cambió en MySQL 5. (Ver respuesta con más puntos para un mejor método).
fideloper
20
@fideloper, con la recopilación puedes decirle al juego de caracteres. Esto se debe a que la primera parte de la clasificación incluye el conjunto de caracteres, por ejemplo, si la clasificación es 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.
Pacerier
1
Esto le indica el conjunto de caracteres de la tabla. No le indica el conjunto de caracteres de las tablas creadas en el futuro cuando no se especifica ningún conjunto de caracteres en la sintaxis de crear tabla (necesitará el conjunto de caracteres del esquema para eso).
HoldOffHunger
217
Para bases de datos :
USE your_database_name;
show variables like"character_set_database";-- or:-- show variables like "collation_database";
¿Para qué versión de mysql se muestra esta salida type? Tengo mysql 5.7.9 y typemuestro el data typede la columna, no el character set. A algunos les gusta int(10)varchar(255)... etc. y noutf8
MTK
Mi salida también se muestra typecomo data type@MTK, tal vez arriba es un error de copiar y pegar en la sección "salida:".
Tenga en cuenta. La clasificación que se muestra en el estado de la tabla show no es el conjunto de caracteres de la tabla. La clasificación te dice cómo se ordenan / comparan los personajes. por ejemplo, utf8_bin_ci compara los datos sin tener en cuenta el caso (no distingue entre mayúsculas y minúsculas, por lo que "m" y "M" son lo mismo), utf8_bin_cs se compara con mayúsculas y minúsculas (por lo que "m" y "M" son distintos). Esto no es lo mismo que el conjunto de caracteres de una tabla.
Daan
66
@Daan, deja de difundir información errónea. Consulte stackoverflow.com/questions/1049728/… , con la recopilación puede decirle al juego de caracteres.
Pacerier
44
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
;
en las bases de datos MySQL pueden tener conjuntos de caracteres por defecto
James
3
select default_character_set_name from information_schema.schematano 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.schematao simplemente: select*from information_schema.schemata.
Pacerier
Lo usé SELECT * FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '<database-name>' \G; y funcionó genial :) ¡Gracias!
Sankalp
23
Para ver la clasificación predeterminada de la base de datos:
USE db_name;SELECT@@character_set_database,@@collation_database;
Le indica el SQL completo que se usaría para crear la tabla tal como está actualmente, que debe incluir su conjunto de caracteres.
James
Además, si la columna no indica un conjunto de caracteres en particular, entonces está utilizando el conjunto de caracteres predeterminado de la tabla.
@Pacerier, ¿comparaste mi respuesta con estas correctamente?
sjas
15
Para bases de datos :
SHOW CREATEDATABASE"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
La cita necesaria para "conjunto de caracteres predeterminado / clasificación es siempre LATINA" en MySQL
Pacerier
Cita necesaria? ¿Alguna vez ha usado una base de datos MySQL? Todo el mundo sabe que el conjunto de caracteres / clasificación predeterminados se latin1_swedish_cidebe a que Monty Widenius, el creador de MySQL, es sueco y no estaba pensando en Big Picture como debería tener cuando comenzó.
Spencer Williams
5
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/…Respuestas:
Así es como lo haría:
Para esquemas (o bases de datos, son sinónimos):
Para tablas:
Para columnas:
fuente
schemaname
puede ser el nombre de la base de datos.Para columnas :
fuente
latin1_swedish_ci
, el conjunto de caracteres no puede ser otra cosa ademáslatin1
. Si la recopilación esutf8mb4_general_ci
, el juego de caracteres no puede ser otra cosa ademásutf8mb4
.Para bases de datos :
Cf. esta página . Y mira el manual de MySQL
fuente
Para todas las bases de datos que tiene en el servidor:
Salida:
Para una sola base de datos :
Salida:
Obteniendo la clasificación para las tablas :
O: generará el SQL completo para crear la tabla:
mysql> show create table my_tablename
Obteniendo la colación de columnas :
salida:
fuente
type
? Tengo mysql 5.7.9 ytype
muestro eldata type
de la columna, no elcharacter set
. A algunos les gustaint(10)
varchar(255)
... etc. y noutf8
type
comodata 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:
fuente
Para bases de datos :
Solo usa estos comandos:
fuente
fuente
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
.fuente
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. Utilizarselect 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:
Para ver la clasificación de la tabla:
Para ver la clasificación de las columnas:
fuente
Para tablas y columnas :
fuente
Para bases de datos :
Salida de ejemplo:
fuente
Para bases de datos :
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
fuente
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:
fuente