Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como posso descobrir o charset/collation padrão no meu MySQL


Use SHOW CREATE TABLE . Por exemplo:
CREATE TABLE a (
    dflt VARCHAR(11),
    cs   VARCHAR(11)  CHARACTER SET latin1,
    cola VARCHAR(11)  COLLATE utf8mb4_hungarian_ci,
    cc   VARCHAR(11)  CHARACTER SET latin1  COLLATE latin1_bin,
    colb VARCHAR(11)  COLLATE latin1_bin
);

SHOW CREATE TABLE a\G

mysql> SHOW CREATE TABLE a\G
*************************** 1. row ***************************
       Table: a
Create Table: CREATE TABLE `a` (
  `dflt` varchar(11) DEFAULT NULL,
  `cs`   varchar(11) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL,
  `cola` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_hungarian_ci DEFAULT NULL,
  `cc`   varchar(11) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
  `colb` varchar(11) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

Notas:
  • A maioria das colunas tem o charset e o agrupamento por extenso.
  • Aquele que não tem (dflt ) herda essas configurações de DEFAULTs para a mesa.
  • Cada CHARACTER SET tem um agrupamento "padrão".
  • Cada COLLATE está associado a exatamente um CHARACTER SET , ou seja, a primeira parte do nome do agrupamento.
  • (Não mostrado aqui):os DEFAULTs para a tabela são herdados do DATABASE .
  • O padrão do MySQL 8 é CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci se você não fizer nada.
  • Versões mais antigas padronizadas para CHARSET=latin1 COLLATE=latin1_swedish_ci
  • O "0900" ou "520" em alguns agrupamentos refere-se aos padrões Unicode versões 9.0 e 5.20. Você pode deduzir disso que pode haver novos agrupamentos "melhores" no futuro.