Deve-se notar que o information_schema está apenas no MySQL 5 em diante, acredito.
Vex
4
Tanto quanto eu posso dizer o mais próximo que você pode começar a recuperar informações coluna específica conjunto de caracteres no MySQL <5 é fazer colunas mostram completo a partir tableName
Robin Winslow
14
Esta resposta foi muito útil, mas se você quiser solucionar um problema de conjunto de caracteres / agrupamento, provavelmente também precisará verificar a conexão conjunto de caracteres, conjunto de caracteres do cliente etc ...: MOSTRAR VARIÁVEIS COMO 'character_set%'; MOSTRAR VARIÁVEIS COMO '% de intercalação';
BenL
2
a tabela de operação retorna "Empty set (0.00 sec)" para mim
minhajul
9
Para esquemas-esquemas: Observe que esse schemanamepode ser apenas o nome do banco de dados.
Olá, este é o futuro falando! Para qualquer pessoa que marque esta resposta, esse método mostra apenas Agrupamento, em vez de conjunto de caracteres. Eu acredito que isso mudou no MySQL 5. (Veja a resposta com mais pontos para um método melhor).
Fideloper 28/01
20
@ fideloper, Com o agrupamento você pode dizer o conjunto de caracteres. Isso ocorre porque a primeira parte do agrupamento inclui o conjunto de caracteres, por exemplo, se o agrupamento é latin1_swedish_ci, o conjunto de caracteres não pode ser outra coisa além disso latin1. Se o agrupamento for utf8mb4_general_ci, o conjunto de caracteres não poderá ser outra coisa além disso utf8mb4.
Pacerier 20/08/2015
1
Isso indica o conjunto de caracteres da tabela. Ele não informa o conjunto de caracteres das tabelas criadas no futuro quando nenhum conjunto de caracteres é especificado na sintaxe criar tabela (você precisará do conjunto de caracteres do esquema para isso).
HoldOffHunger
217
Para bancos de dados :
USE your_database_name;
show variables like"character_set_database";-- or:-- show variables like "collation_database";
Qual versão do mysql mostra essa saída type? Eu tenho o mysql 5.7.9 e typemostro o data typeda coluna e não o character set. Alguns gostam int(10)varchar(255)... etc e nãoutf8
MTK
Minha saída mostra typecomo data typetambém o @MTK, talvez acima seja um erro de copiar e colar na seção "output:".
Observe. O agrupamento mostrado no status da tabela de show não é o conjunto de caracteres da tabela. O agrupamento informa como os caracteres são classificados / comparados. por exemplo, utf8_bin_ci compara dados sem considerar o caso (sem distinção entre maiúsculas e minúsculas, portanto "m" e "M" são iguais)), utf8_bin_cs compara com a distinção entre maiúsculas e minúsculas (portanto, "m" e "M" são distintos). Não é o mesmo que o conjunto de caracteres de uma tabela.
Daan
6
@ Daan, Pare de espalhar informações erradas. Consulte stackoverflow.com/questions/1049728/… , com o agrupamento que você pode dizer ao conjunto de caracteres.
Pacerier 20/08/2015
44
Para bancos de dados :
Basta usar estes comandos:
USE db_name;SELECT@@character_set_database;-- or:-- SELECT @@collation_database;
SELECT TABLE_SCHEMA,
NOME DA TABELA,
CCSA.CHARACTER_SET_NAME AS DEFAULT_CHAR_SET,
NOME DA COLUNA,
COLUMN_TYPE,
C.CHARACTER_SET_NAME
FROM information_schema.TABLES AS T
JUNTE-SE ao information_schema.COLUMNS AS C USING (TABLE_SCHEMA, TABLE_NAME)
JUNTE-se a information_schema.COLLATION_CHARACTER_SET_APPLICABILITY AS CCSA
ON (T.TABLE_COLLATION = CCSA.COLLATION_NAME)
WHERE TABLE_SCHEMA = SCHEMA ()
AND C.DATA_TYPE IN ('enum', 'varchar', 'char', 'text', 'mediumtext', 'longtext')
PEDIDO POR TABLE_SCHEMA,
NOME DA TABELA,
NOME DA COLUNA
;
Muito bom, Eric. Basta colar esse código na linha de comando mysql, bateu retorno e você obter o conjunto de caracteres de cada coluna em cada tabela em cada banco de dados :)
Jerry Krinock
1
@JerryKrinock Você obtém todas as colunas do banco de dados atual e nada se nenhum banco de dados estiver selecionado.
Ortomala Lokni
24
Eu sempre olho SHOW CREATE TABLE mydatabase.mytable.
Para o banco de dados, parece que você precisa olhar SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA.
no MySQL bancos de dados pode ter conjuntos de caracteres padrão
James
3
select default_character_set_name from information_schema.schematanão é suficiente porque você não pode dizer qual linha se correlaciona com qual banco de dados. Use select default_character_set_name,schema_name from information_schema.schemataou simplesmente: select*from information_schema.schemata.
Pacerier 20/08/2015
Eu usei SELECT * FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '<database-name>' \G; e funcionou muito bem :) Obrigado!
Sankalp
23
Para ver o agrupamento padrão do banco de dados:
USE db_name;SELECT@@character_set_database,@@collation_database;
@Pacerier, você realmente comparou minha resposta a essas corretamente?
Ssp 01/09
15
Para bancos de dados :
SHOW CREATEDATABASE"DB_NAME_HERE";
Ao criar um banco de dados (MySQL), o conjunto de caracteres / agrupamento padrão é sempre LATIN, em vez de você selecionar um diferente ao criar inicialmente seu banco de dados
A citação necessária para "conjunto / agrupamento de caracteres padrão é sempre LATIN" no MySQL.
Pacerier 20/08/2015
Citação necessária? Você já usou um banco de dados MySQL? Todo mundo sabe que o conjunto de caracteres / agrupamento padrão é latin1_swedish_ciporque Monty Widenius, o criador do MySQL, é sueco e não estava pensando tão bem como deveria quando começou.
Spencer Williams
5
Como muitos escreveram anteriormente, SHOW FULL COLUMNS deve ser o método preferido para obter informações da coluna. O que falta é uma maneira de obter o conjunto de caracteres depois disso, sem acessar diretamente as tabelas de metadados:
SHOW FULL COLUMNS FROM my_table WHERE Field ='my_field'
SHOW COLLATION WHERE Collation ='collation_you_got'
SHOW CREATE TABLE
, conforme discutido em stackoverflow.com/questions/57628217/…Respostas:
Aqui está como eu faria isso -
Para esquemas (ou bancos de dados - são sinônimos):
Para tabelas:
Para colunas:
fonte
schemaname
pode ser apenas o nome do banco de dados.Para colunas :
fonte
latin1_swedish_ci
, o conjunto de caracteres não pode ser outra coisa além dissolatin1
. Se o agrupamento forutf8mb4_general_ci
, o conjunto de caracteres não poderá ser outra coisa além dissoutf8mb4
.Para bancos de dados :
Cf. nesta página . E confira o manual do MySQL
fonte
Para todos os bancos de dados que você possui no servidor:
Resultado:
Para um único banco de dados :
Resultado:
Obtendo o agrupamento para Tabelas :
OU - produzirá o SQL completo para criar a tabela:
mysql> show create table my_tablename
Obtendo o agrupamento de colunas :
resultado:
fonte
type
? Eu tenho o mysql 5.7.9 etype
mostro odata type
da coluna e não ocharacter set
. Alguns gostamint(10)
varchar(255)
... etc e nãoutf8
type
comodata type
também o @MTK, talvez acima seja um erro de copiar e colar na seção "output:".Para tabelas :
SHOW TABLE STATUS
listará todas as tabelas.Filtrar usando:
fonte
Para bancos de dados :
Basta usar estes comandos:
fonte
fonte
Eu sempre olho
SHOW CREATE TABLE mydatabase.mytable
.Para o banco de dados, parece que você precisa olhar
SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA
.fonte
select default_character_set_name from information_schema.schemata
não é suficiente porque você não pode dizer qual linha se correlaciona com qual banco de dados. Useselect default_character_set_name,schema_name from information_schema.schemata
ou simplesmente:select*from information_schema.schemata
.SELECT * FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '<database-name>' \G;
e funcionou muito bem :) Obrigado!Para ver o agrupamento padrão do banco de dados:
Para ver o agrupamento da tabela:
Para ver o agrupamento das colunas:
fonte
Para tabelas e colunas :
fonte
Para bancos de dados :
Exemplo de saída:
fonte
Para bancos de dados :
Ao criar um banco de dados (MySQL), o conjunto de caracteres / agrupamento padrão é sempre LATIN, em vez de você selecionar um diferente ao criar inicialmente seu banco de dados
fonte
latin1_swedish_ci
porque Monty Widenius, o criador do MySQL, é sueco e não estava pensando tão bem como deveria quando começou.Como muitos escreveram anteriormente, SHOW FULL COLUMNS deve ser o método preferido para obter informações da coluna. O que falta é uma maneira de obter o conjunto de caracteres depois disso, sem acessar diretamente as tabelas de metadados:
fonte