Antworten:
So würde ich es machen -
Für Schemas (oder Datenbanken - sie sind Synonyme):
SELECT default_character_set_name FROM information_schema.SCHEMATA
WHERE schema_name = "schemaname";
Für Tabellen:
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";
Für Spalten:
SELECT character_set_name FROM information_schema.`COLUMNS`
WHERE table_schema = "schemaname"
AND table_name = "tablename"
AND column_name = "columnname";
schemaname
möglicherweise nur der Datenbankname ist.
Für Spalten :
SHOW FULL COLUMNS FROM table_name;
latin1_swedish_ci
, kann der Zeichensatz nichts anderes sein latin1
. Wenn die Sortierung lautet utf8mb4_general_ci
, kann der Zeichensatz nichts anderes sein utf8mb4
.
Für Datenbanken :
USE your_database_name;
show variables like "character_set_database";
-- or:
-- show variables like "collation_database";
Vgl. diese Seite . Und lesen Sie das MySQL-Handbuch
Für alle Datenbanken, die Sie auf dem Server haben:
mysql> SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;
Ausgabe:
+----------------------------+---------+--------------------+
| database | charset | collation |
+----------------------------+---------+--------------------+
| information_schema | utf8 | utf8_general_ci |
| my_database | latin1 | latin1_swedish_ci |
...
+----------------------------+---------+--------------------+
Für eine einzelne Datenbank :
mysql> USE my_database;
mysql> show variables like "character_set_database";
Ausgabe:
+----------------------------+---------+
| Variable_name | Value |
+----------------------------+---------+
| character_set_database | latin1 |
+----------------------------+---------+
Abrufen der Sortierung für Tabellen :
mysql> USE my_database;
mysql> SHOW TABLE STATUS WHERE NAME LIKE 'my_tablename';
ODER - gibt das vollständige SQL für die Erstellungstabelle aus:
mysql> show create table my_tablename
Erhält die Sortierung von Spalten :
mysql> SHOW FULL COLUMNS FROM my_tablename;
Ausgabe:
+---------+--------------+--------------------+ ....
| field | type | collation |
+---------+--------------+--------------------+ ....
| id | int(10) | (NULL) |
| key | varchar(255) | latin1_swedish_ci |
| value | varchar(255) | latin1_swedish_ci |
+---------+--------------+--------------------+ ....
type
? Ich habe MySQL 5.7.9 und type
zeige das data type
der Spalte nicht das character set
. Einige mögen int(10)
varchar(255)
... etc und nichtutf8
type
auch das data type
@MTK, vielleicht ist oben ein Fehler beim Kopieren und Einfügen im Abschnitt "Ausgabe:".
Für Tabellen :
SHOW TABLE STATUS
listet alle Tabellen auf.
Filtern mit:
SHOW TABLE STATUS where name like 'table_123';
SELECT TABLE_SCHEMA, TABELLENNAME, CCSA.CHARACTER_SET_NAME AS DEFAULT_CHAR_SET, SPALTENNAME, COLUMN_TYPE, C.CHARACTER_SET_NAME FROM information_schema.TABLES AS T. JOIN information_schema.COLUMNS AS C USING (TABLE_SCHEMA, TABLE_NAME) JOIN 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') ORDER BY TABLE_SCHEMA, TABELLENNAME, SPALTENNAME ;;
Ich schaue immer nur an SHOW CREATE TABLE mydatabase.mytable
.
Für die Datenbank scheint es, dass Sie sich ansehen müssen SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA
.
select default_character_set_name from information_schema.schemata
ist nicht genug, weil Sie nicht sagen können, welche Zeile mit welcher Datenbank korreliert. Verwenden Sie select default_character_set_name,schema_name from information_schema.schemata
oder einfach : select*from information_schema.schemata
.
SELECT * FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '<database-name>' \G;
und es hat super funktioniert :) Danke!
So zeigen Sie die Standardkollatierung der Datenbank an:
USE db_name;
SELECT @@character_set_database, @@collation_database;
So zeigen Sie die Zusammenstellung der Tabelle an:
SHOW TABLE STATUS where name like 'table_name';
So zeigen Sie die Sortierung der Spalten an:
SHOW FULL COLUMNS FROM table_name;
Für Tabellen und Spalten :
show create table your_table_name
Für Datenbanken :
SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;
Beispielausgabe:
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>
Für Datenbanken :
SHOW CREATE DATABASE "DB_NAME_HERE";
Beim Erstellen einer Datenbank (MySQL) ist der Standardzeichensatz / die Standardkollatierung immer LATIN, stattdessen haben Sie beim erstmaligen Erstellen Ihrer Datenbank einen anderen ausgewählt
latin1_swedish_ci
dass Monty Widenius, der Schöpfer von MySQL, schwedisch ist und nicht so groß gedacht hat, wie er es zu Beginn haben sollte.
Wie viele zuvor geschrieben haben, sollte SHOW FULL COLUMNS die bevorzugte Methode sein, um Spalteninformationen abzurufen. Was fehlt, ist eine Möglichkeit, einen Zeichensatz danach abzurufen, ohne die Metadatentabellen direkt zu erreichen:
SHOW FULL COLUMNS FROM my_table WHERE Field = 'my_field'
SHOW COLLATION WHERE Collation = 'collation_you_got'
SHOW CREATE TABLE
, wie unter stackoverflow.com/questions/57628217/…