Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso capire il set di caratteri/collation predefinito nel mio MySQL

Usa SHOW CREATE TABLE . Ad esempio:

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

Note:

  • La maggior parte delle colonne ha il set di caratteri e le regole di confronto esplicitate.
  • Quello che non lo fa (dflt ) eredita queste impostazioni da DEFAULTs per la tavola.
  • Ogni CHARACTER SET ha un confronto "predefinito".
  • Ogni COLLATE è associato esattamente a un CHARACTER SET , ovvero la prima parte del nome di confronto.
  • (Non mostrato qui):i DEFAULTs per la tabella sono ereditati dal DATABASE .
  • MySQL 8 ha per impostazione predefinita CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci se non fai nulla.
  • Le versioni precedenti erano predefinite su CHARSET=latin1 COLLATE=latin1_swedish_ci
  • Il valore "0900" o "520" in alcune regole di confronto si riferisce a Unicode Standards versioni 9.0 e 5.20. Puoi dedurre da ciò che potrebbero esserci nuove regole di confronto "migliori" in futuro.