Як я бачу, який набір символів - це база даних / таблиця / стовпчик MySQL?


Відповіді:


743

Ось як я це зробив -

Для схем (або баз даних - вони є синонімами):

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";

3
Слід зазначити, що інформація_schema є лише в MySQL 5 і далі, я вважаю.
Векс

4
Наскільки я можу сказати найближчим, ви можете отримати інформацію про специфічний набір символів для стовпців у MySQL <5, це зробити ПОКАЗНИТИ ПОЛІ КОЛІНСИ з tableName
Робін Уінслоу

14
Ця відповідь виявилася дуже корисною, але якщо ви хочете виправити проблему з набором символів / зіставленням, вам, ймовірно, доведеться також перевірити з'єднання символів, набір клієнтів_характерів і набору тощо. ПОКАЗУЙТЕ ВАРІАБЛІЇ, ПОДИХНУЮТЬ «співставлення%»;
BenL

2
операція таблиці повертає для мене "Порожній набір (0,00 сек)"
minhajul

9
Для Scheme-Dummies: Зауважте, що це schemanameможе бути просто ім'я бази даних.
BurninLeo

465

Для стовпців :

SHOW FULL COLUMNS FROM table_name;

43
Здрастуйте, це майбутня мова! Для тих, хто перевіряє цю відповідь, цей метод показує лише Collation, а не charset. Я вважаю, що це змінилося на MySQL 5. (Див. Відповідь з більшою кількістю пунктів для кращого методу).
fideloper

20
@fideloper, За допомогою порівняння ви можете сказати схему. Це пов'язано з тим, що перша частина порівняння включає в себе схему, наприклад, якщо це збірка latin1_swedish_ci, то вона не може бути крім іншого latin1. Якщо параметр є utf8mb4_general_ci, шаблоном не може бути нічого іншого utf8mb4.
Pacerier

1
Це говорить вам про набір символів таблиці. Він не повідомляє вам набір символів таблиць, створених у майбутньому, коли в синтаксисі таблиці таблиці не вказаний набір символів (для цього знадобиться набір символів схеми).
HoldOffHunger

217

Для баз даних :

USE your_database_name;
show variables like "character_set_database";
-- or:
-- show variables like "collation_database";

Ср. ця сторінка . І ознайомтеся з посібником MySQL


3
Це відповідає лише на 1/3 запитання.
Tobias J

1
@TobyJ, я не бачу , ти скаржишся на stackoverflow.com/a/4805510/632951
Pacerier

що означає cf? посилання не існує. @Pacerier
Янніс Дран

Це слід об'єднати у верхній відповіді. Це мені дуже допомогло.
beppe9000

150

Для всіх баз даних на сервері:

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  |
+---------+--------------+--------------------+ ....

Яку версію mysql показує цей вихід type? У мене є mysql 5.7.9 і typeпоказувати data typeстовпець не той character set. Деякі люблять int(10) varchar(255)... тощо, а неutf8
MTK

Мій висновок відображається typeяк data type@MTK, можливо, вище - помилка вставлення копії в розділі "output:".
tronmcp

65

Для таблиць :

SHOW TABLE STATUS перерахує всі таблиці.

Фільтр за допомогою:

SHOW TABLE STATUS where name like 'table_123';

9
Будь ласка, запиши. Порівняння, показане у статусі таблиці показу, не є набором символів таблиці. Порівняння повідомляє про те, як сортуються / порівнюються персонажі. наприклад, utf8_bin_ci порівнює дані, не стосуючись регістру (регістр нечутливий, тому "m" і "M" однакові), utf8_bin_cs порівнює з чутливістю до регістру (тому "m" і "M" відрізняються). Це не те саме, що набір символів таблиці.
Даан

6
@Daan, припиніть поширювати дезінформацію. Дивіться stackoverflow.com/questions/1049728/… , із зіставленням ви можете розповісти про набір.
Pacerier

44

Для баз даних :

Просто використовуйте ці команди:

USE db_name;
SELECT @@character_set_database;
-- or:
-- SELECT @@collation_database;

34
ВИБІРТЕ 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
;

2
Дуже приємно, Еріку. Просто вставте цей код у командний рядок mysql, натисніть клавішу return, і ви отримаєте набір символів кожного стовпця в кожній таблиці кожної бази даних :)
Джеррі Крінок

1
@JerryKrinock Ви отримуєте всі стовпці поточної бази даних, і нічого, якщо не вибрана база даних.
Ортомала Локні

24

Я завжди просто дивлюсь SHOW CREATE TABLE mydatabase.mytable.

Для бази даних, здається, вам потрібно подивитися SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA.


3
у базах даних mysql можуть бути набори символів за замовчуванням
Джеймс,

3
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.
Pacerier

Я використав SELECT * FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '<database-name>' \G; І це спрацювало чудово :) Дякую!
Sankalp

23

Щоб переглянути порівняння бази даних за замовчуванням:

USE db_name;
SELECT @@character_set_database, @@collation_database;

Щоб переглянути порівняння таблиці:

SHOW TABLE STATUS where name like 'table_name';

Щоб переглянути порівняння стовпців:

SHOW FULL COLUMNS FROM table_name;

21

Для таблиць і стовпців :

show create table your_table_name

2
Він повідомляє вам про повний SQL, який би використовувався для створення таблиці в такому стані, яка повинна містити набір символів.
Джеймс

Крім того, якщо стовпець не вказує конкретну діаграму, він використовує таблицю за замовчуванням.
Pacerier

18

Для баз даних :

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> 


1
@Pacerier Ви насправді порівняли мою відповідь з цими правильно?
sjas

15

Для баз даних :

SHOW CREATE DATABASE "DB_NAME_HERE";

Створюючи Базу даних (MySQL), набір символів / зіставлення символів за замовчуванням завжди є LATIN, замість цього ви вибрали інший під час створення вашої бази даних


3
Цитування, необхідне для "набору символів / зіставлення за замовчуванням, завжди є LATIN" в MySQL.
Pacerier

Цитування потрібне? Ви коли-небудь використовували базу даних MySQL? Всім відомо, що набір символів / зіставлення символів за замовчуванням відбувається latin1_swedish_ciчерез те, що Монті Віденус, творець MySQL, є шведкою і не думав, як велика картина, як повинна була б, коли він починав.
Спенсер Вільямс

5

Як багато хто писав раніше, ПОКАЗНИТИ ПОЛЬНІ КОЛОНИ повинні бути кращим методом отримання інформації про стовпці. Не вистачає способу отримати діаграму після цього, не доходячи безпосередньо до таблиць метаданих:

SHOW FULL COLUMNS FROM my_table WHERE Field = 'my_field'
SHOW COLLATION WHERE Collation = 'collation_you_got'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.