如何查看MySQL数据库/表/列的字符集是什么?

Ror*_*ory 621 mysql sql unicode collation character-encoding

什么是(默认)字符集:

  • MySQL数据库

  • MySQL表

  • MySQL专栏

Zen*_*hai 707

这是我怎么做的 -

对于架构:

SELECT default_character_set_name FROM information_schema.SCHEMATA 
WHERE schema_name = "schemaname";
Run Code Online (Sandbox Code Playgroud)

对于表格:

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";
Run Code Online (Sandbox Code Playgroud)

对于列:

SELECT character_set_name FROM information_schema.`COLUMNS` 
WHERE table_schema = "schemaname"
  AND table_name = "tablename"
  AND column_name = "columnname";
Run Code Online (Sandbox Code Playgroud)

  • 这个答案非常有用,但是如果你想解决一个character_set/collat​​ion问题,你可能还需要检查连接character_set,client_character_set等......:SHOW VARIABLES LIKE'character_set%'; SHOW VARIABLES LIKE'collat​​ion%'; (13认同)
  • 对于Schema-Dummies:注意,`schemaname`可能只是数据库名称. (9认同)
  • 据我所知,最接近你可以在MySQL中检索列特定的字符集信息<5是从tableName做SHOW FULL COLUMNS (4认同)
  • 需要注意的是,information_schema仅在MySQL 5以后才相信. (3认同)
  • 表操作为我返回“空集(0.00秒)” (2认同)

小智 456

对于:

SHOW FULL COLUMNS FROM table_name;
Run Code Online (Sandbox Code Playgroud)

  • 你好,这是未来的发言!对于检查此答案的任何人,此方法仅显示Collat​​ion,而不是charset.我相信这在MySQL 5中发生了变化.(有关更好的方法,请参阅更多要点的答案). (41认同)
  • @fideloper,**与核对你可以告诉的字符集.**这是因为整理的第一部分包括字符集,例如,当核对`latin1_swedish_ci`,字符集不能是任何东西,除了`latin1`人.如果排序规则是`utf8mb4_general_ci`,除了`utf8mb4`之外,charset不能是其他任何东西. (18认同)

J. *_*fer 216

对于数据库:

USE your_database_name;
show variables like "character_set_database";
-- or:
-- show variables like "collation_database";
Run Code Online (Sandbox Code Playgroud)

参看 这个页面.并查看MySQL手册

  • 这只回答了问题的1/3. (3认同)

Nab*_*med 141

对于服务器上的所有数据库:

mysql> SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;
Run Code Online (Sandbox Code Playgroud)

输出:

+----------------------------+---------+--------------------+
| database                   | charset | collation          |
+----------------------------+---------+--------------------+
| information_schema         | utf8    | utf8_general_ci    |
| my_database                | latin1  | latin1_swedish_ci  |
...
+----------------------------+---------+--------------------+
Run Code Online (Sandbox Code Playgroud)

对于单个数据库:

mysql> USE my_database;
mysql> show variables like "character_set_database";
Run Code Online (Sandbox Code Playgroud)

输出:

    +----------------------------+---------+
    | Variable_name              |  Value  |
    +----------------------------+---------+
    | character_set_database     |  latin1 | 
    +----------------------------+---------+
Run Code Online (Sandbox Code Playgroud)

获取的排序规则:

mysql> USE my_database;
mysql> SHOW TABLE STATUS WHERE NAME LIKE 'my_tablename';
Run Code Online (Sandbox Code Playgroud)

或 - 将输出create table的完整SQL:

mysql> show create table my_tablename


获取的排序规则:

mysql> SHOW FULL COLUMNS FROM my_tablename;
Run Code Online (Sandbox Code Playgroud)

输出:

+---------+--------------+--------------------+ ....
| field   | type         | collation          |
+---------+--------------+--------------------+ ....
| id      | int(10)      | (NULL)             |
| key     | varchar(255) | latin1_swedish_ci  |
| value   | varchar(255) | latin1_swedish_ci  |
+---------+--------------+--------------------+ ....
Run Code Online (Sandbox Code Playgroud)


Vex*_*Vex 65

对于表格:

SHOW TABLE STATUS 将列出所有表格.

过滤使用:

SHOW TABLE STATUS where name like 'table_123';
Run Code Online (Sandbox Code Playgroud)

  • 请注意.显示表状态中显示的排序规则不是表的字符集.排序规则告诉您如何对字符进行排序/比较.例如,utf8_bin_ci在不考虑大小写的情况下比较数据(不区分大小写,因此"m"和"M"相同),utf8_bin_cs与区分大小写进行比较(因此"m"和"M"是不同的).这与表的字符集不同. (8认同)
  • @Daan,停止传播错误信息.见http://stackoverflow.com/questions/1049728/how-do-i-see-what-c​​haracter-set-a-mysql-database-table-column-is/1049776#comment52112197_4805510,与核对你可以告诉字符集. (6认同)

小智 44

对于数据库:

只需使用以下命令:

USE db_name;
SELECT @@character_set_database;
-- or:
-- SELECT @@collation_database;
Run Code Online (Sandbox Code Playgroud)


小智 32

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
  JOIN information_schema.COLUMNS AS C USING (TABLE_SCHEMA, TABLE_NAME)
  JOIN information_schema.COLLATION_CHARACTER_SET_APPLICABILITY AS CCSA
       ON (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
;

  • 非常好,埃里克。只需将该代码粘贴到 mysql 命令行中,按回车键即可获得每个数据库中每个表中每一列的字符集:) (2认同)

use*_*513 24

要查看数据库的默认排序规则:

USE db_name;
SELECT @@character_set_database, @@collation_database;
Run Code Online (Sandbox Code Playgroud)

要查看表的排序规则:

SHOW TABLE STATUS where name like 'table_name';
Run Code Online (Sandbox Code Playgroud)

要查看列的排序规则:

SHOW FULL COLUMNS FROM table_name;
Run Code Online (Sandbox Code Playgroud)


cha*_*aos 23

我总是只看SHOW CREATE TABLE mydatabase.mytable.

对于数据库,您似乎需要查看SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA.

  • 从info_schema.schemata`中选择default_character_set_name是不够的,因为你无法判断哪一行与哪个数据库相关.使用`select default_character_set_name,来自information_schema.schemata`的schema_name或简单地:**`select*from information_schema.schemata`**. (3认同)
  • 在mysql数据库中可以有默认的字符集 (2认同)

Jam*_*mes 21

对于:

show create table your_table_name
Run Code Online (Sandbox Code Playgroud)

  • 它告诉您将用于创建当前表的表的完整SQL,其中应包括它的字符集. (2认同)

sja*_*jas 17

对于数据库:

SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;
Run Code Online (Sandbox Code Playgroud)

示例输出:

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> 
Run Code Online (Sandbox Code Playgroud)


小智 15

对于数据库:

SHOW CREATE DATABASE "DB_NAME_HERE";
Run Code Online (Sandbox Code Playgroud)

在创建数据库(MySQL)时,默认字符集/排序规则始终是LATIN,而是在最初创建数据库时选择了不同的字符集/排序规则

  • [引用需要](http://xkcd.com/285)对于MySQL中的"默认字符集/校对总是LATIN"*. (3认同)

Wow*_*ost 5

正如许多人先前所写,SHOW FULL COLUMNS应该是获取列信息的首选方法。缺少的是在此之后无需直接到达元数据表即可获取字符集的方法:

SHOW FULL COLUMNS FROM my_table WHERE Field = 'my_field'
SHOW COLLATION WHERE Collation = 'collation_you_got'
Run Code Online (Sandbox Code Playgroud)