Відповіді:
Ось як я це зробив -
Для схем (або баз даних - вони є синонімами):
SELECT default_character_set_name FROM information_schema.SCHEMATA
WHERE schema_name = "schemaname";
Для таблиць:
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";
Для стовпців:
SELECT character_set_name FROM information_schema.`COLUMNS`
WHERE table_schema = "schemaname"
AND table_name = "tablename"
AND column_name = "columnname";
schemaname
може бути просто ім'я бази даних.
Для стовпців :
SHOW FULL COLUMNS FROM table_name;
latin1_swedish_ci
, то вона не може бути крім іншого latin1
. Якщо параметр є utf8mb4_general_ci
, шаблоном не може бути нічого іншого utf8mb4
.
Для баз даних :
USE your_database_name;
show variables like "character_set_database";
-- or:
-- show variables like "collation_database";
Ср. ця сторінка . І ознайомтеся з посібником MySQL
Для всіх баз даних на сервері:
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 |
| my_database | latin1 | latin1_swedish_ci |
...
+----------------------------+---------+--------------------+
Для єдиної бази даних :
mysql> USE my_database;
mysql> show variables like "character_set_database";
Вихід:
+----------------------------+---------+
| Variable_name | Value |
+----------------------------+---------+
| character_set_database | latin1 |
+----------------------------+---------+
Отримання порівняння для таблиць :
mysql> USE my_database;
mysql> SHOW TABLE STATUS WHERE NAME LIKE 'my_tablename';
АБО - виведе повний SQL для створення таблиці:
mysql> show create table my_tablename
Отримання зіставлення стовпців :
mysql> SHOW FULL COLUMNS FROM my_tablename;
вихід:
+---------+--------------+--------------------+ ....
| field | type | collation |
+---------+--------------+--------------------+ ....
| id | int(10) | (NULL) |
| key | varchar(255) | latin1_swedish_ci |
| value | varchar(255) | latin1_swedish_ci |
+---------+--------------+--------------------+ ....
type
? У мене є mysql 5.7.9 і type
показувати data type
стовпець не той character set
. Деякі люблять int(10)
varchar(255)
... тощо, а неutf8
type
як data type
@MTK, можливо, вище - помилка вставлення копії в розділі "output:".
Для таблиць :
SHOW TABLE STATUS
перерахує всі таблиці.
Фільтр за допомогою:
SHOW TABLE STATUS where name like 'table_123';
ВИБІРТЕ TABLE_SCHEMA, TABLE_NAME, CCSA.CHARACTER_SET_NAME AS DEFAULT_CHAR_SET, COLUMN_NAME, COLUMN_TYPE, C.CHARACTER_SET_NAME ВІД інформації_schema.TABLES AS T ПРИЄДНАЙТЕСЬ information_schema.COLUMNS ЯК ВИКОРИСТОВУЄТЬСЯ (TABLE_SCHEMA, TABLE_NAME) ПРИЄДНАЙТЕСЬ інформація_schema.COLLATION_CHARACTER_SET_APPLICABILITY AS CCSA УВІМКНЕНО (T.TABLE_COLLATION = CCSA.COLLATION_NAME) ДЕ TABLE_SCHEMA = SCHEMA () І C.DATA_TYPE IN ('enum', 'varchar', 'char', 'text', 'mediumtext', 'longtext') ЗАМОВЛЕННЯ TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME ;
Я завжди просто дивлюсь SHOW CREATE TABLE mydatabase.mytable
.
Для бази даних, здається, вам потрібно подивитися SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA
.
select default_character_set_name from information_schema.schemata
недостатньо, тому що ви не можете вказати, який рядок співвідноситься з якою базою даних. Використовуйте select default_character_set_name,schema_name from information_schema.schemata
або просто: select*from information_schema.schemata
.
SELECT * FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '<database-name>' \G;
І це спрацювало чудово :) Дякую!
Щоб переглянути порівняння бази даних за замовчуванням:
USE db_name;
SELECT @@character_set_database, @@collation_database;
Щоб переглянути порівняння таблиці:
SHOW TABLE STATUS where name like 'table_name';
Щоб переглянути порівняння стовпців:
SHOW FULL COLUMNS FROM table_name;
Для таблиць і стовпців :
show create table your_table_name
Для баз даних :
SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;
Приклад виводу:
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>
Для баз даних :
SHOW CREATE DATABASE "DB_NAME_HERE";
Створюючи Базу даних (MySQL), набір символів / зіставлення символів за замовчуванням завжди є LATIN, замість цього ви вибрали інший під час створення вашої бази даних
latin1_swedish_ci
через те, що Монті Віденус, творець MySQL, є шведкою і не думав, як велика картина, як повинна була б, коли він починав.
Як багато хто писав раніше, ПОКАЗНИТИ ПОЛЬНІ КОЛОНИ повинні бути кращим методом отримання інформації про стовпці. Не вистачає способу отримати діаграму після цього, не доходячи безпосередньо до таблиць метаданих:
SHOW FULL COLUMNS FROM my_table WHERE Field = 'my_field'
SHOW COLLATION WHERE Collation = 'collation_you_got'
SHOW CREATE TABLE
, як обговорювалося в stackoverflow.com/questions/57628217/…