Odpowiedzi:
Oto jak bym to zrobił -
W przypadku schematów (lub baz danych - są to synonimy):
SELECT default_character_set_name FROM information_schema.SCHEMATA
WHERE schema_name = "schemaname";
Dla tabel:
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";
Dla kolumn:
SELECT character_set_name FROM information_schema.`COLUMNS`
WHERE table_schema = "schemaname"
AND table_name = "tablename"
AND column_name = "columnname";
schemaname
może to być tylko nazwa bazy danych.
Dla kolumn :
SHOW FULL COLUMNS FROM table_name;
latin1_swedish_ci
, zestaw znaków nie może być niczym innym niż latin1
. Jeśli zestawienie jest utf8mb4_general_ci
, zestaw znaków nie może być niczym innym niż utf8mb4
.
W przypadku baz danych :
USE your_database_name;
show variables like "character_set_database";
-- or:
-- show variables like "collation_database";
Por. ta strona . I sprawdź instrukcję MySQL
Dla wszystkich baz danych, które masz na serwerze:
mysql> SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;
Wynik:
+----------------------------+---------+--------------------+
| database | charset | collation |
+----------------------------+---------+--------------------+
| information_schema | utf8 | utf8_general_ci |
| my_database | latin1 | latin1_swedish_ci |
...
+----------------------------+---------+--------------------+
W przypadku pojedynczej bazy danych :
mysql> USE my_database;
mysql> show variables like "character_set_database";
Wynik:
+----------------------------+---------+
| Variable_name | Value |
+----------------------------+---------+
| character_set_database | latin1 |
+----------------------------+---------+
Uzyskiwanie zestawień dla tabel :
mysql> USE my_database;
mysql> SHOW TABLE STATUS WHERE NAME LIKE 'my_tablename';
LUB - wyświetli pełny kod SQL do utworzenia tabeli:
mysql> show create table my_tablename
Pobieranie zestawienia kolumn :
mysql> SHOW FULL COLUMNS FROM my_tablename;
wynik:
+---------+--------------+--------------------+ ....
| field | type | collation |
+---------+--------------+--------------------+ ....
| id | int(10) | (NULL) |
| key | varchar(255) | latin1_swedish_ci |
| value | varchar(255) | latin1_swedish_ci |
+---------+--------------+--------------------+ ....
type
? Mam mysql 5.7.9 i type
pokazuję data type
kolumnę, a nie character set
. Niektórzy lubią int(10)
varchar(255)
... itd. I nieutf8
type
jak data type
oraz @MTK, być może powyżej jest błąd pasty kopia w „wyjściu” sekcji.
Dla tabel :
SHOW TABLE STATUS
wyświetli wszystkie tabele.
Filtruj za pomocą:
SHOW TABLE STATUS where name like 'table_123';
SELECT TABLE_SCHEMA, NAZWA TABELI, CCSA.CHARACTER_SET_NAME AS DEFAULT_CHAR_SET, NAZWA KOLUMNY, COLUMN_TYPE, C.CHARACTER_SET_NAME Z Information_schema.TABLES AS T DOŁĄCZ do schematu_informacyjnego.COLUMNS AS C USING (TABLE_SCHEMA, TABLE_NAME) DOŁĄCZ do schematu informacyjnego.COLLATION_CHARACTER_SET_APPLICABILITY AS CCSA ON (T.TABLE_COLLATION = CCSA.COLLATION_NAME) GDZIE TABELA_SCHEMA = SCHEMA () ORAZ C.DATA_TYPE IN („enum”, „varchar”, „char”, „text”, „mediumtext”, „longtext”) ZAMÓW WEDŁUG TABELI_SCHEMA, NAZWA TABELI, NAZWA KOLUMNY ;
Zawsze tylko patrzę SHOW CREATE TABLE mydatabase.mytable
.
W przypadku bazy danych wydaje się, że musisz na nią spojrzeć SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA
.
select default_character_set_name from information_schema.schemata
to za mało, ponieważ nie można powiedzieć, który wiersz koreluje z bazą danych. Użyj select default_character_set_name,schema_name from information_schema.schemata
lub po prostu: select*from information_schema.schemata
.
SELECT * FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '<database-name>' \G;
I działało świetnie :) Dzięki!
Aby zobaczyć domyślne sortowanie bazy danych:
USE db_name;
SELECT @@character_set_database, @@collation_database;
Aby zobaczyć zestawienie tabeli:
SHOW TABLE STATUS where name like 'table_name';
Aby zobaczyć zestawienie kolumn:
SHOW FULL COLUMNS FROM table_name;
W przypadku tabel i kolumn :
show create table your_table_name
W przypadku baz danych :
SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;
Przykładowe dane wyjściowe:
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>
W przypadku baz danych :
SHOW CREATE DATABASE "DB_NAME_HERE";
Podczas tworzenia bazy danych (MySQL) domyślnym zestawem znaków / zestawieniem jest zawsze LATIN, zamiast tego wybrano inny na początku tworzenia bazy danych
latin1_swedish_ci
że Monty Widenius, twórca MySQL, jest Szwedem i nie myślał tak dużego obrazu, jak powinien, kiedy zaczynał.
Jak wielu pisało wcześniej, SHOW FULL COLUMNS powinna być preferowaną metodą uzyskiwania informacji o kolumnach. Brakuje sposobu na uzyskanie zestawu znaków bez bezpośredniego sięgania do tabel metadanych:
SHOW FULL COLUMNS FROM my_table WHERE Field = 'my_field'
SHOW COLLATION WHERE Collation = 'collation_you_got'
SHOW CREATE TABLE
, jak omówiono w stackoverflow.com/questions/57628217/…