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

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;

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


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

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

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;

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
;

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.


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;

21

Untuk tabel dan kolom :

show create table your_table_name

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> 


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


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'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.