【问题标题】:How do I see what character set a MySQL database / table / column is?如何查看 MySQL 数据库/表/列的字符集是什么?
【发布时间】:2010-11-06 04:33:41
【问题描述】:

什么是(默认)字符集:

  • MySQL 数据库

  • MySQL 表

  • MySQL 专栏

【问题讨论】:

标签: sql mysql unicode character-encoding collation


【解决方案1】:

这就是我的做法 -

对于模式(或数据库 - 它们是同义词):

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

【讨论】:

  • 应该注意的是 information_schema 我相信只在 MySQL 5 以后。
  • 据我所知,您可以在 MySQL
  • 这个答案非常有帮助,但是如果您想解决 character_set / collat​​ion 问题,您可能还需要检查连接 character_set、client_character_set 等...:SHOW VARIABLES LIKE 'character_set%';显示变量,如“collat​​ion%”;
  • 表操作为我返回“空集(0.00 秒)”
  • 对于 Schema-Dummies:请注意,schemaname 可能只是数据库名称。
【解决方案2】:

对于

SHOW FULL COLUMNS FROM table_name;

【讨论】:

  • 你好,这是未来的说法!对于检查此答案的任何人,此方法仅显示排序规则,而不是字符集。我相信这在 MySQL 5 发生了变化。(请参阅更多点的答案以获得更好的方法)。
  • @fideloper, 通过排序规则,您可以知道字符集。 这是因为排序规则的第一部分包括字符集,例如如果排序规则是latin1_swedish_ci,则字符集不能是latin1 之外的任何其他字符。如果排序规则是utf8mb4_general_ci,则字符集不能是除utf8mb4 之外的任何其他字符。
  • 这告诉你表格字符集。当 create table 语法中未指定字符集时,它不会告诉您将来创建的表的字符集(您将需要架构字符集)。
【解决方案3】:

对于数据库

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

参照。 this page。并查看 MySQL 手册

【讨论】:

  • 这只回答了问题的 1/3。
  • @TobyJ,我没有看到你在stackoverflow.com/a/4805510/632951抱怨
  • cf 代表什么?链接虽然不存在。 @Pacerier
  • 这应该合并到最佳答案中。这对我很有帮助。
  • @YannisDran:“cf。”是拉丁语“confer”=“bring together”=“compare”的缩写。它通常更普遍地用于表示“看到”。
【解决方案4】:

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

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

OR - 将输出创建表的完整 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
  • 我的输出将type 显示为data type 以及@MTK,也许上面是“输出:”部分中的复制粘贴错误。
【解决方案5】:

对于表格

SHOW TABLE STATUS 将列出所有表。

过滤使用:

SHOW TABLE STATUS where name like 'table_123';

【讨论】:

  • 请注意。 show table status 中显示的排序规则不是表的字符集。排序规则告诉您字符是如何排序/比较的。例如utf8_bin_ci 比较数据时不考虑大小写(不区分大小写,因此“m”和“M”相同),utf8_bin_cs 比较区分大小写(因此“m”和“M”不同)。这与表格的字符集不同。
  • @Daan,停止传播错误信息。请参阅 stackoverflow.com/questions/1049728/… ,使用排序规则可以告诉字符集。
【解决方案6】:

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

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

查看表格的排序规则:

SHOW TABLE STATUS where name like 'table_name';

要查看列的排序规则:

SHOW FULL COLUMNS FROM table_name;

查看表格的默认字符集

SHOW CREATE TABLE table_name;

【讨论】:

    【解决方案7】:

    对于数据库

    只需使用这些命令:

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

    【讨论】:

    【解决方案8】:
    选择表模式, 表名, CCSA.CHARACTER_SET_NAME 作为 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) 加入 information_schema.COLLATION_CHARACTER_SET_APPLICABILITY AS CCSA 开(T.TABLE_COLLATION = CCSA.COLLATION_NAME) WHERE TABLE_SCHEMA=SCHEMA() AND C.DATA_TYPE IN ('enum', 'varchar', 'char', 'text', 'mediumtext', 'longtext') 按 T​​ABLE_SCHEMA 排序, 表名, COLUMN_NAME ;

    【讨论】:

    • 非常好,埃里克。只需将该代码粘贴到 mysql 命令行中,按回车键,即可获得每个数据库中每个表中每一列的字符集:)
    • @JerryKrinock 你得到当前数据库的每一列,如果没有选择数据库,则什么都没有。
    【解决方案9】:

    我总是只看SHOW CREATE TABLE mydatabase.mytable

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

    【讨论】:

    • 在mysql数据库中可以有默认字符集
    • 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; 效果很好:) 谢谢!
    【解决方案10】:

    对于表格

    show create table your_table_name
    

    【讨论】:

    • 它会告诉您用于创建当前表的完整 SQL,其中应包括其字符集。
    • 另外,如果该列没有说明特定的字符集,那么它使用的是表的默认字符集。
    【解决方案11】:

    对于数据库

    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> 
    

    【讨论】:

    【解决方案12】:

    对于数据库

    SHOW CREATE DATABASE "DB_NAME_HERE";
    

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

    【讨论】:

    • Citation needed for "default character set/collat​​ion is always LATIN" in MySQL.
    • 需要引用吗?你用过 MySQL 数据库吗?每个人都知道默认的字符集/排序规则是 latin1_swedish_ci,因为 MySQL 的创建者 Monty Widenius 是瑞典人,他在开始时并没有像他应该有的那样考虑全局。
    【解决方案13】:

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

    SHOW FULL COLUMNS FROM my_table WHERE Field = 'my_field'
    SHOW COLLATION WHERE Collation = 'collation_you_got'
    

    【讨论】:

      【解决方案14】:

      对于数据库: USE db_name; SELECT @@character_set_database;

      【讨论】:

        【解决方案15】:

        显示全局变量,其中 variable_name like 'character_set_%' 或 variable_name like 'collat​​ion%'

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-03
          • 1970-01-01
          • 1970-01-01
          • 2011-07-09
          • 1970-01-01
          相关资源
          最近更新 更多