MySQLデータベース/テーブル/カラムの文字セットを確認するにはどうすればよいですか?


回答:


744

これが私のやり方です-

スキーマ(またはデータベース-それらは同義語)の場合:

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
information_schemaはMySQL 5以降にのみ存在することに注意してください。
Vex

4
MySQL <5で列固有の文字セット情報を取得できる最も近いと言える限り、SHOW FULL COLUMNS FROM tableName
Robin Winslow

14
この回答は非常に役に立ちましたが、character_set /照合の問題のトラブルシューティングを行う場合は、おそらく接続のcharacter_set、client_character_setなども確認する必要があります。:SHOW VARIABLES LIKE 'character_set%'; VARIABLES LIKE 'collat​​ion%';
BenL、2015

2
テーブルオペレーションが「Empty set(0.00 sec)」を返す
minhajul

9
Schema-Dummiesの場合:これschemanameは、単にデータベース名である場合があります。
BurninLeo

465

カラム

SHOW FULL COLUMNS FROM table_name;

43
こんにちは、これは未来の話です!この答えを確認する人にとっては、このメソッドは文字セットではなく照合のみを表示します。これはMySQL 5で変更されたと思います(より良い方法については、ポイントを追加した回答を参照してください)。
fideloper、2014年

20
@fideloper、照合を使用すると、文字セットを指定できます。これは、照合の最初の部分に文字セットが含まれているためです。たとえば、照合がのlatin1_swedish_ci場合、文字セットは以外にはなりませんlatin1。照合がのutf8mb4_general_ci場合、文字セットは以外にはできませんutf8mb4
Pacerier、2015

1
これにより、テーブルの文字セットがわかります。テーブル作成の構文で文字セットが指定されていない場合、将来作成されるテーブルの文字セットは通知されません(そのためにはスキーマ文字セットが必要になります)。
HoldOffHunger

217

以下のためのデータベース

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

Cf. このページ。そしてMySQLのマニュアルをチェックしてください


3
これは質問の3分の1しか答えません。
Tobias J

1
@TobyJ、私はあなたがstackoverflow.com/a/4805510/632951
Pacerier

cfは何の略ですか?リンクは存在しません。@Pacerier
Yannis Dran

これは上位の回答に統合する必要があります。それは本当に私を助けました。
beppe9000 2017年

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 setint(10) varchar(255)...のようなもの とそうでないものutf8
MTK

私の出力は@MTKと同様に表示typedata typeれますが、おそらく上記は "output:"セクションのコピーペーストエラーです。
tronmcp

65

のテーブル

SHOW TABLE STATUS すべてのテーブルがリストされます。

次を使用してフィルタリング:

SHOW TABLE STATUS where name like 'table_123';

9
ご注意ください。show table statusに表示される照合は、テーブルの文字セットではありません。照合は、文字がどのようにソート/比較されるかを示します。たとえば、utf8_bin_ciは大文字と小文字を区別せずにデータを比較します(大文字と小文字を区別しないため、「m」と「M」は同じです)、utf8_bin_csは大文字と小文字を区別して比較します(「m」と「M」は区別されます)。これは、テーブルの文字セットと同じではありません。
Daan

6
@大安、誤った情報を広めるのをやめなさい。stackoverflow.com/questions/1049728/…を参照してください。照合では、文字セットを指定できます。
Pacerier 2015

44

以下のためのデータベース

次のコマンドを使用するだけです。

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、
       COLUMN_NAME、
       COLUMN_TYPE、
       C.CHARACTER_SET_NAME
  FROM information_schema.TABLES AS T
  J_IN information_schema.COLUMNS AS C USING(TABLE_SCHEMA、TABLE_NAME)
  CCSAとしてJOIN information_schema.COLLATION_CHARACTER_SET_APPLICABILITYを結合
       オン(T.TABLE_COLLATION = CCSA.COLLATION_NAME)
 WHERE TABLE_SCHEMA = SCHEMA()
   AND C.DATA_TYPE IN( 'enum'、 'varchar'、 'char'、 'text'、 'mediumtext'、 'longtext')
 ORDER BY TABLE_SCHEMA、
          TABLE_NAME、
          COLUMN_NAME
;

2
とても素敵です、エリック。そのコードをmysqlコマンドラインに貼り付け、return
キーを押すだけ

1
@JerryKrinock現在のデータベースのすべての列を取得し、データベースが選択されていない場合は何も取得しません。
Ortomala Lokni

24

私はいつも見てSHOW CREATE TABLE mydatabase.mytableいるだけです。

データベースの場合、を確認する必要があるようSELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATAです。


3
mysqlデータベースでは、デフォルトの文字セットを使用できます
James

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 2015

私は使用しSELECT * FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '<database-name>' \G; 、それはうまくいきました :)ありがとう!
Sankalp 2015年

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を示します。これには、文字セットが含まれているはずです。
James

また、列に特定の文字セットが記載されていない場合は、テーブルのデフォルトの文字セットが使用されています。
Pacerier 2015

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> 

これは、topstackoverflow.com/a/1049753/632951の最初の回答の繰り返しではありませんか?
Pacerier 2015

1
@Pacerierあなたは実際にこれらに対する私の答えを適切に比較しましたか?
sjas

15

以下のためのデータベース

SHOW CREATE DATABASE "DB_NAME_HERE";

データベース(MySQL)を作成する場合、デフォルトの文字セット/照合順序は常にラテンです。代わりに、最初にデータベースを作成するときに別の文字セット/照合順序を選択しました


3
必要な引用のために、「デフォルトキャラクタセット/照合は常にLATINである」 MySQLの中で。
Pacerier 2015

引用が必要ですか?MySQLデータベースを使用したことがありますか?デフォルトの文字セット/照合順序はlatin1_swedish_ci、MySQLの作成者であるMonty Wideniusがスウェーデン人であり、始めたときのように全体像を考えていなかったことに誰もが知っています。
スペンサーウィリアムズ

5

以前に多くの人が書いたように、列情報を取得するには、SHOW FULL COLUMNSが推奨される方法です。不足しているのは、メタデータテーブルに直接到達せずに、その後文字セットを取得する方法です。

SHOW FULL COLUMNS FROM my_table WHERE Field = 'my_field'
SHOW COLLATION WHERE Collation = 'collation_you_got'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.