मैं कैसे देख सकता हूं कि एक MySQL डेटाबेस / टेबल / कॉलम किस वर्ण को सेट करता है?


652

इसके लिए (डिफ़ॉल्ट) चारसेट क्या है:

  • MySQL डेटाबेस

  • MySQL टेबल

  • MySQL कॉलम


1
तालिकाओं और स्तंभों के लिए, बस का उपयोग करें SHOW CREATE TABLE, जैसा कि stackoverflow.com/questions/57628217/…
रिक जेम्स

जवाबों:


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
यह ध्यान दिया जाना चाहिए कि info_schema केवल MySQL 5 में है जिसके बाद मेरा मानना ​​है।
चिढ़ना

4
जहां तक ​​मैं निकटतम बता सकता हूं कि आप MySQL <5 में कॉलम विशिष्ट वर्ण सेट जानकारी प्राप्त करने के लिए प्राप्त कर सकते हैं <तालिका 5 से कम पूर्ण पाठ करना है
रॉबिन विंसलो

14
यह उत्तर बहुत मददगार था, लेकिन यदि आप एक character_set / collation समस्या को शूट करना चाहते हैं, तो आपको संभवतः कनेक्शन character_set, client_character_set आदि की जांच करने की आवश्यकता होगी ...: SHOW VARIABLES LIKE का 'character_set%'; शो वार्स लाइक 'कोलाज%';
BenL

2
टेबल ऑपरेशन मेरे लिए "खाली सेट (0.00 सेकंड)"
मिन्हाजुल

9
स्कीमा-डमीज के लिए: ध्यान दें, यह schemanameसिर्फ डेटाबेस का नाम हो सकता है।
बर्निनलियो

465

के लिए कॉलम :

SHOW FULL COLUMNS FROM table_name;

43
नमस्कार, यह भविष्य बोल रहा है! इस उत्तर की जाँच करने वाले किसी भी व्यक्ति के लिए, यह विधि केवल कोलाज़ को दिखाती है, बजाय कि परेशान किए। मेरा मानना ​​है कि यह MySQL 5 में बदल गया है (बेहतर विधि के लिए अधिक बिंदुओं के साथ उत्तर देखें)।
फिदेल्पर

20
@ फिडेलोपर, इस टकराव के साथ आप चारसेट बता सकते हैं। ऐसा इसलिए है क्योंकि टकराव के पहले भाग में चारसेट शामिल है, जैसे कि यदि टकराव होता है latin1_swedish_ci, तो चारसेट के अलावा कुछ और नहीं हो सकता है latin1। यदि टकराव होता है utf8mb4_general_ci, तो चारसेट के अलावा कुछ और नहीं हो सकता है utf8mb4
पचेरियर

1
यह आपको टेबल कैरेक्टर सेट बताता है। यह आपको भविष्य में बनाई गई तालिकाओं के वर्ण सेट के बारे में नहीं बताता है जब कोई चरित्र सेट तालिका तालिका सिंटैक्स में निर्दिष्ट नहीं होता है (आपको इसके लिए स्कीमा वर्ण सेट की आवश्यकता होगी)।
होल्डऑफहंगर

217

के लिए डेटाबेस :

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

सी एफ यह पेज । और MySQL मैनुअल की जाँच करें


3
यह केवल 1/3 प्रश्न का उत्तर देता है।
टोबियास जे

1
@TobyJ, मैं तुम्हें पर शिकायत नहीं दिख रहा है stackoverflow.com/a/4805510/632951
Pacerier

cf का क्या अर्थ है? लिंक हालांकि मौजूद नहीं है। @Pacerier
Yannis Dran

इसे शीर्ष उत्तर में मिला दिया जाना चाहिए। इसने वास्तव में मेरी मदद की।
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 दिखाता है, शायद ऊपर "आउटपुट:" अनुभाग में एक कॉपी पेस्ट त्रुटि है।
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
@ दान, गलत सूचना फैलाना बंद करो। देखें stackoverflow.com/questions/1049728/… , इस टकराव के साथ आप चार्ट को बता सकते हैं।
पेसर

44

के लिए डेटाबेस :

बस इन आदेशों का उपयोग करें:

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

34
TABLE_SCHEMA का चयन करें,
       तालिका नाम,
       CCSA.CHARACTER_SET_NAME DEFAULT_CHAR_SET के रूप में,
       आम नाम,
       COLUMN_TYPE,
       C.CHARACTER_SET_NAME
  T_shema.TABLES के रूप में T से जानकारी
  JOIN info_schema.COLUMNS AS C USING (TABLE_SCHEMA, TABLE_NAME) के रूप में
  CCSA के रूप में JOIN जानकारी_schema.COLLATION_CHARACTER_SET_APPLICABILITY
       ON (T.TABLE_COLLATION = CCSA.COLLATION_NAME)
 जहां TABLE_SCHEMA = SCHEMA ()
   और C.DATA_TYPE IN ('enum', 'varchar', 'char', 'text', 'mediumtext', 'longtext')
 TABLE_SCHEMA द्वारा आदेश,
          तालिका नाम,
          आम नाम
;

2
बहुत अच्छा, एरिक। बस उस कोड को mysql कमांड लाइन में पेस्ट करें, वापसी लौटें और आपको हर डेटाबेस में हर टेबल में हर कॉलम का कैरेक्टर सेट मिल जाए :)
जैरी क्रिनॉक

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:।
पचेरियर

मैं इस्तेमाल किया SELECT * FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '<database-name>' \G; और यह महान काम किया :) धन्यवाद!
संकल्प

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 बताता है जिसका उपयोग तालिका बनाने के लिए किया जाएगा क्योंकि यह वर्तमान में खड़ा है, जिसमें यह चरित्र सेट शामिल होना चाहिए।
जेम्स

इसके अलावा, यदि कॉलम किसी विशेष वर्णसेट को नहीं बताता है, तो यह तालिका के डिफ़ॉल्ट चारसेट का उपयोग कर रहा है।
पचेरियर

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> 

क्या यह शीर्ष और stackoverflow.com/a/1049753/632951 पर पहले उत्तर की पुनरावृत्ति नहीं है ?
पचेरियर

1
@Pacerier क्या आपने वास्तव में मेरे जवाब की तुलना इनसे ठीक से की है?
सूज

15

के लिए डेटाबेस :

SHOW CREATE DATABASE "DB_NAME_HERE";

एक डेटाबेस (MySQL) बनाने में, डिफ़ॉल्ट चरित्र सेट / कोलाज हमेशा LATIN होता है, इसके बजाय आपने अपने डेटाबेस में शुरू में एक अलग चयन किया है।


3
MySQL में "डिफ़ॉल्ट कैरेक्टर सेट / कोलाजेशन हमेशा LATIN है" के लिए आवश्यक उद्धरण
पचेरियर

प्रशस्ति पत्र की जरूरत? क्या आपने कभी MySQL डेटाबेस का उपयोग किया है? हर कोई जानता है कि डिफ़ॉल्ट चरित्र सेट / latin1_swedish_ciटकराव इसलिए है क्योंकि MySQL के निर्माता मोंटी विडेनियस स्वीडिश हैं और बिग पिक्चर के रूप में नहीं सोच रहे थे जैसा कि उन्हें शुरू करना चाहिए था।
स्पेंसर विलियम्स

5

जैसा कि कई पहले लिखा था, कॉलम की जानकारी प्राप्त करने के लिए SHOW FULL COLUMNS पसंदीदा तरीका होना चाहिए। क्या गायब है यह सीधे मेटाडेटा टेबल तक पहुंचने के बाद चारसेट प्राप्त करने का एक तरीका है:

SHOW FULL COLUMNS FROM my_table WHERE Field = 'my_field'
SHOW COLLATION WHERE Collation = 'collation_you_got'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.