Bir MySQL veritabanı / tablo / sütununun hangi karakter kümesini olduğunu nasıl görebilirim?


Yanıtlar:


743

İşte böyle yapardım -

Şemalar (veya Veritabanları - eşanlamlıdır) için:

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

Tablolar için:

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

Sütunlar için:

SELECT character_set_name FROM information_schema.`COLUMNS` 
WHERE table_schema = "schemaname"
  AND table_name = "tablename"
  AND column_name = "columnname";

3
Information_schema'nın sadece MySQL 5'ten sonra olduğuna inanıyorum.
Vex

4
Size en yakın söyleyebildiğim kadarıyla MySQL <5 sütun belirli karakter kümesi bilgilerini almak için alabilirsiniz tabloName TAM SÜTUNLARI GÖSTER yapmak
Robin Winslow

14
Bu yanıt çok yardımcı oldu, ancak bir karakter_kümesi / harmanlama sorunu çekmekte zorluk çekiyorsanız, muhtemelen karakter_kümesi, istemci_kullanıcı_kümesi vb. Bağlantısını da kontrol etmeniz gerekir. '% Harmanlama' gibi DEĞİŞKENLERİ GÖSTER;
BenL

2
tablo işlemi benim için "Boş set (0.00 sn)"
döndürüyor

9
Schema-Dummies için: Not, bu schemanamesadece veritabanı adı olabilir.
BurninLeo

465

İçin sütunlar :

SHOW FULL COLUMNS FROM table_name;

43
Merhaba, bu gelecekteki konuşma! Bu yanıtı kontrol eden herkes için, bu yöntem karakter kümesi yerine yalnızca Harmanlama'yı gösterir. Bunun MySQL 5'te değiştiğine inanıyorum. (Daha iyi bir yöntem için cevaba bakınız).
fideloper

20
@fideloper, Harmanlama ile karakter kümesini anlatabilirsiniz. Çünkü harmanlamanın ilk kısmı karakter kümesini içerir, örneğin, harmanlama ise latin1_swedish_cikarakter kümesi dışında başka bir şey olamaz latin1. Harmanlama ise utf8mb4_general_cikarakter kümesi dışında başka bir şey olamaz utf8mb4.
Pacerier

1
Bu tablo karakter kümesini gösterir. Tablo oluşturma sözdiziminde hiçbir karakter kümesi belirtilmediğinde gelecekte oluşturulacak tabloların karakter kümesini söylemez (bunun için şema karakter kümesine ihtiyacınız olacaktır).
HoldOffHunger

217

İçin veritabanları :

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

Krş bu sayfa . Ve MySQL kılavuzuna göz atın


3
Bu, sorunun sadece 1 / 3'üne yanıt verir.
Tobias J


cf ne anlama geliyor? bağlantı mevcut değil. Pacerier
Yannis Dran

Bu en üstteki cevapta birleştirilmelidir. Bana gerçekten yardımcı oldu.
beppe9000

150

Sunucuda bulunan tüm veritabanları için:

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

Çıktı:

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

Bir İçin Tek Veritabanı :

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

Çıktı:

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

Tablolar için harmanlama alma :

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

VEYA - tablo oluşturmak için tam SQL çıktısı verir:

mysql> show create table my_tablename


Sütunların harmanlanmasını alma :

mysql> SHOW FULL COLUMNS FROM my_tablename;

çıktı:

+---------+--------------+--------------------+ ....
| field   | type         | collation          |
+---------+--------------+--------------------+ ....
| id      | int(10)      | (NULL)             |
| key     | varchar(255) | latin1_swedish_ci  |
| value   | varchar(255) | latin1_swedish_ci  |
+---------+--------------+--------------------+ ....

MySQL'in hangi sürümü bu çıktıyı gösteriyor type? Ben MySQL 5.7.9 var ve typegöstermek data typesütunun değil character set. Bazıları int(10) varchar(255)... vs gibi değilutf8
MTK

Benim çıkış gösterileri typeyanı data typesıra @MTK olarak, belki yukarıda bir kopyala yapıştır hatadır "çıktı:" bölümü.
tronmcp

65

İçin tablolar :

SHOW TABLE STATUS tüm tabloları listeler.

Şunu kullanarak filtrele:

SHOW TABLE STATUS where name like 'table_123';

9
Lütfen aklınızda bulundurun. Tabloyu göster durumunda gösterilen harmanlama, tablonun karakter kümesi değildir. Harmanlama, karakterlerin nasıl sıralandığını / karşılaştırıldığını gösterir. örneğin utf8_bin_ci, büyük / küçük harf duyarlı olmayan verileri karşılaştırır (büyük / küçük harf duyarsız, bu nedenle "m" ve "M" aynıdır), utf8_bin_cs büyük / küçük harf duyarlılığı ile karşılaştırır (bu nedenle "m" ve "M" farklıdır). Bu, tablonun karakter kümesiyle aynı değildir.
Daan

6
@Dan, Yanlış bilgi yaymayı bırak. Bkz. Stackoverflow.com/questions/1049728/… , harmanlama ile karakter kümesini anlayabilirsiniz.
Pacerier

44

İçin veritabanları :

Sadece şu komutları kullanın:

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

34
TABLE_SCHEMA SEÇ,
       TABLO İSMİ,
       DEFAULT_CHAR_SET OLARAK CCSA.CHARACTER_SET_NAME,
       SÜTUN ADI,
       column_type,
       C.CHARACTER_SET_NAME
  BİLGİ TARAFINDAN BİLGİ.
  C KULLANIM OLARAK BİLGİLER (TABLE_SCHEMA, TABLE_NAME)
  CCSA OLARAK information_schema.COLLATION_CHARACTER_SET_APPLICABILITY KATILIN
       AÇIK (T.TABLE_COLLATION = CCSA.COLLATION_NAME)
 NEREDE TABLE_SCHEMA = SCHEMA ()
   VE C.DATA_TYPE IN ('enum', 'varchar', 'char', 'metin', 'orta metin', 'uzun metin')
 SİPARİŞ TABLE_SCHEMA,
          TABLO İSMİ,
          SÜTUN ADI
;

2
Çok iyi Eric. Bu kodu mysql komut satırına yapıştırın, geri dönün ve her veritabanındaki her tabloda her sütunun karakter kümesini alın :)
Jerry Krinock

1
@JerryKrinock Seçili veritabanının her sütununu alırsınız ve hiçbir veritabanı seçilmezse hiçbir şey almazsınız.
Ortomala Lokni

24

Her zaman bakarım SHOW CREATE TABLE mydatabase.mytable.

Veritabanı için, bakmanız gerekir SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA.


3
mysql veritabanlarında varsayılan karakter setleri olabilir
James

3
select default_character_set_name from information_schema.schematayeterli değil çünkü hangi satırın hangi veritabanı ile ilişkili olduğunu söyleyemezsiniz. Kullanım select default_character_set_name,schema_name from information_schema.schematabasitçe veya: select*from information_schema.schemata.
Pacerier

Ben kullandım SELECT * FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '<database-name>' \G; Ve harika çalıştı :) Teşekkürler!
Sankalp

23

Veritabanının varsayılan harmanlamasını görmek için:

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

Tablonun harmanlamasını görmek için:

SHOW TABLE STATUS where name like 'table_name';

Sütunların harmanlamasını görmek için:

SHOW FULL COLUMNS FROM table_name;

21

İçin tablolar ve sütunlar :

show create table your_table_name

2
Tabloyu şu anda olduğu gibi oluşturmak için kullanılacak tam SQL'i söyler ve karakter kümesini içermelidir.
James

Ayrıca, sütun belirli bir karakter kümesini belirtmezse, tablonun varsayılan karakter kümesini kullanır.
Pacerier

18

İçin veritabanları :

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

Örnek çıktı:

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 bunlara cevabımı gerçekten karşılaştırdınız mı?
sjas

15

İçin veritabanları :

SHOW CREATE DATABASE "DB_NAME_HERE";

Bir Veritabanı (MySQL) oluştururken, varsayılan karakter kümesi / harmanlama her zaman LATIN'dir, bunun yerine başlangıçta veritabanınızı oluştururken farklı bir tane seçtiniz


3
MySQL'de "varsayılan karakter kümesi / harmanlama her zaman LATIN" için gerekli alıntı .
Pacerier

Kaynak belirtilmeli? Hiç MySQL veritabanı kullandınız mı? Herkes, varsayılan karakter kümesinin / harmanlamanın, latin1_swedish_ciMySQL'in yaratıcısı Monty Widenius'un İsveçli olduğunu ve başladığında olması gerektiği gibi Büyük Resim olarak düşünmediğini biliyor .
Spencer Williams

5

Birçoğunun daha önce yazdığı gibi, sütun bilgilerini almak için TAM KOLONLARI GÖSTER tercih edilen yöntem olmalıdır. Eksik olan, meta veri tablolarına doğrudan ulaşmadan bundan sonra karakter seti almanın bir yoludur:

SHOW FULL COLUMNS FROM my_table WHERE Field = 'my_field'
SHOW COLLATION WHERE Collation = 'collation_you_got'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.