Bagaimana saya melihat karakter apa yang mengatur database / tabel / kolom MySQL?

Jawaban:

744

Begini cara saya melakukannya -

Untuk Skema (atau Basis Data - mereka adalah sinonim):

SELECT default_character_set_name FROM information_schema.SCHEMATA 
WHERE schema_name = "schemaname";

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

Untuk Kolom:

SELECT character_set_name FROM information_schema.`COLUMNS` 
WHERE table_schema = "schemaname"
  AND table_name = "tablename"
  AND column_name = "columnname";
Zenshai
sumber
3
Perlu dicatat bahwa information_schema hanya di MySQL 5 dan seterusnya saya percaya.
Vex
4
Sejauh yang saya tahu paling dekat Anda bisa mendapatkan kolom informasi set karakter khusus di MySQL <5 adalah melakukan SHOW FULL COLUMNS FROM tableName
Robin Winslow
14
Jawaban ini sangat membantu, tetapi jika Anda ingin kesulitan memotret masalah character_set / collation Anda mungkin juga perlu memeriksa koneksi character_set, client_character_set dll ...: TAMPILKAN VARIABEL SEPERTI 'character_set%'; TAMPILKAN VARIABEL SEPERTI 'collation%';
BenL
2
operasi tabel mengembalikan "Set kosong (0,00 dtk)" untuk saya
minhajul
9
Untuk Skema-Dummies: Catatan, itu schemanamemungkin hanya nama database.
BurninLeo
465

Untuk kolom :

SHOW FULL COLUMNS FROM table_name;
serhat
sumber
43
Halo, ini masa depan! Bagi siapa pun yang memeriksa jawaban ini, metode ini hanya menampilkan Collation, bukan charset. Saya percaya ini berubah di MySQL 5. (Lihat jawaban dengan lebih banyak poin untuk metode yang lebih baik).
fideloper
20
@fideloper, Dengan pemeriksaan Anda bisa memberi tahu rangkaian karakter. Itu karena bagian pertama dari collation termasuk charset, misalnya jika collation adalah latin1_swedish_ci, charset tidak bisa menjadi hal lain selain itu latin1. Jika collation adalah utf8mb4_general_ci, charset tidak bisa menjadi hal lain selain itu utf8mb4.
Pacerier
1
Ini memberitahu Anda set karakter tabel. Itu tidak memberi tahu Anda set karakter tabel yang dibuat di masa depan ketika tidak ada set karakter yang ditentukan dalam sintaks tabel buat (Anda akan memerlukan set karakter skema untuk itu).
HoldOffHunger
217

Untuk basis data :

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

Lih halaman ini . Dan lihat manual MySQL

J. Polfer
sumber
3
Ini hanya menjawab 1/3 dari pertanyaan.
Tobias J
1
@TobyJ, saya tidak melihat Anda mengeluh di stackoverflow.com/a/4805510/632951
Pacerier
Apa artinya cf? tautannya tidak ada. @Pacerier
Yannis Dran
Ini harus digabungkan dalam jawaban teratas. Itu sangat membantu saya.
beppe9000
150

Untuk semua database yang Anda miliki di server:

mysql> SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;

Keluaran:

+----------------------------+---------+--------------------+
| database                   | charset | collation          |
+----------------------------+---------+--------------------+
| information_schema         | utf8    | utf8_general_ci    |
| my_database                | latin1  | latin1_swedish_ci  |
...
+----------------------------+---------+--------------------+

Untuk satu Database :

mysql> USE my_database;
mysql> show variables like "character_set_database";

Keluaran:

    +----------------------------+---------+
    | Variable_name              |  Value  |
    +----------------------------+---------+
    | character_set_database     |  latin1 | 
    +----------------------------+---------+

Mendapatkan kolasi untuk Tabel :

mysql> USE my_database;
mysql> SHOW TABLE STATUS WHERE NAME LIKE 'my_tablename';

ATAU - akan menampilkan SQL lengkap untuk membuat tabel:

mysql> show create table my_tablename


Mendapatkan susunan kolom :

mysql> SHOW FULL COLUMNS FROM my_tablename;

keluaran:

+---------+--------------+--------------------+ ....
| field   | type         | collation          |
+---------+--------------+--------------------+ ....
| id      | int(10)      | (NULL)             |
| key     | varchar(255) | latin1_swedish_ci  |
| value   | varchar(255) | latin1_swedish_ci  |
+---------+--------------+--------------------+ ....
Nabeel Ahmed
sumber
Untuk versi mysql apa hasil keluaran ini type? Saya memiliki mysql 5.7.9 dan typemenunjukkan data typekolom bukan character set. Beberapa suka int(10) varchar(255)... dll dan tidakutf8
MTK
Saya keluaran menunjukkan typesebagai data typesebagai @MTK juga, mungkin di atas adalah kesalahan copy paste di "output:" bagian.
tronmcp
65

Untuk tabel :

SHOW TABLE STATUS akan mencantumkan semua tabel.

Filter menggunakan:

SHOW TABLE STATUS where name like 'table_123';
Menyusahkan
sumber
9
Tolong dicatat. Susunan yang ditunjukkan dalam status tabel tunjukkan bukanlah rangkaian karakter dari tabel. Kolasi memberi tahu Anda bagaimana karakter diurutkan / dibandingkan. mis. utf8_bin_ci membandingkan data tanpa mempertimbangkan case (case-sensitive, jadi "m" dan "M" sama), utf8_bin_cs membandingkan dengan sensitivitas case (jadi "m" dan "M" berbeda). Ini tidak sama dengan set karakter tabel.
Daan
6
@ Kan, Berhenti menyebarkan informasi yang salah. Lihat stackoverflow.com/questions/1049728/… , dengan collation Anda dapat memberi tahu charset.
Pacerier
44

Untuk basis data :

Cukup gunakan perintah ini:

USE db_name;
SELECT @@character_set_database;
-- or:
-- SELECT @@collation_database;
DC-
sumber
34
SELECT TABLE_SCHEMA,
       TABLE_NAME,
       CCSA.CHARACTER_SET_NAME AS DEFAULT_CHAR_SET,
       NAMA KOLOM,
       COLUMN_TYPE,
       C.CHARACTER_SET_NAME
  DARI information_schema.TABLES SEBAGAI T
  GABUNG information_schema.COLUMNS AS C MENGGUNAKAN (TABLE_SCHEMA, TABLE_NAME)
  GABUNG information_schema.COLLATION_CHARACTER_SET_APPLICABILITY SEBAGAI CCSA
       ON (T.TABLE_COLLATION = CCSA.COLLATION_NAME)
 WHERE TABLE_SCHEMA = SCHEMA ()
   DAN C.DATA_TYPE IN ('enum', 'varchar', 'char', 'text', 'mediumtext', 'longtext')
 PESANAN OLEH TABLE_SCHEMA,
          TABLE_NAME,
          NAMA KOLOM
;
Eric
sumber
2
Sangat bagus, Eric. Cukup tempel kode itu ke dalam baris perintah mysql, tekan kembali dan Anda mendapatkan set karakter dari setiap kolom di setiap tabel di setiap database :)
Jerry Krinock
1
@ JerryKrinock Anda mendapatkan setiap kolom dari database saat ini dan tidak ada jika tidak ada database yang dipilih.
Ortomala Lokni
24

Saya selalu hanya melihat SHOW CREATE TABLE mydatabase.mytable.

Untuk database, sepertinya Anda perlu melihatnya SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA.

kekacauan
sumber
3
dalam database mysql dapat memiliki set karakter default
James
3
select default_character_set_name from information_schema.schematatidak cukup karena Anda tidak dapat menentukan baris mana yang berkorelasi dengan database mana. Gunakan select default_character_set_name,schema_name from information_schema.schemataatau hanya: select*from information_schema.schemata.
Pacerier
Saya menggunakan SELECT * FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '<database-name>' \G; Dan itu bekerja dengan baik :) Terima kasih!
Sankalp 6-15
23

Untuk melihat susunan default dari basis data:

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

Untuk melihat susunan tabel:

SHOW TABLE STATUS where name like 'table_name';

Untuk melihat susunan kolom:

SHOW FULL COLUMNS FROM table_name;
pengguna1012513
sumber
21

Untuk tabel dan kolom :

show create table your_table_name
James
sumber
2
Ini memberi tahu Anda SQL lengkap yang akan digunakan untuk membuat tabel seperti saat ini berdiri, yang harus menyertakan rangkaian karakter itu.
James
Juga, jika kolom tidak menyatakan charset tertentu, maka itu menggunakan charset default tabel.
Pacerier
18

Untuk basis data :

SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;

Contoh output:

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> 
sja
sumber
Bukankah ini pengulangan dari jawaban pertama di atas dan stackoverflow.com/a/1049753/632951 ?
Pacerier
1
@Pacerier apakah Anda benar-benar membandingkan jawaban saya dengan ini dengan benar?
sjas
15

Untuk basis data :

SHOW CREATE DATABASE "DB_NAME_HERE";

Dalam membuat Database (MySQL), set / collation karakter default selalu LATIN, sebagai gantinya Anda telah memilih yang berbeda pada awalnya membuat database Anda

amenko
sumber
3
Kutipan diperlukan untuk "set karakter standar / collation selalu LATIN" di MySQL.
Pacerier
Kutipan diperlukan? Apakah Anda pernah menggunakan database MySQL? Semua orang tahu bahwa rangkaian karakter default / collation adalah latin1_swedish_cikarena Monty Widenius, pencipta MySQL, adalah Swedia dan tidak berpikir sebagai Gambaran Besar seperti yang seharusnya ketika ia mulai.
Spencer Williams
5

Seperti yang banyak ditulis sebelumnya, SHOW FULL COLUMNS harus menjadi metode yang disukai untuk mendapatkan informasi kolom. Apa yang hilang adalah cara untuk mendapatkan charset setelah itu tanpa mencapai tabel metadata secara langsung:

SHOW FULL COLUMNS FROM my_table WHERE Field = 'my_field'
SHOW COLLATION WHERE Collation = 'collation_you_got'
WowPress.host
sumber