(默认)字符集是什么:

评论

对于表和列,只需使用SHOW CREATE TABLE,如stackoverflow.com/questions/57628217/…中所述。

#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起。

– Vex
09-6-26 at 16:54

据我所知,您可以在MySQL <5中获取特定于列的字符集信息的方法是从tableName中显示全列

–罗宾·温斯洛(Robin Winslow)
2011年6月7日在18:03

这个答案很有帮助,但是如果您想解决一个characterset / collat​​ion问题,您可能还需要检查连接character_set,client_character_set等。。。显示变量,例如“归类%”;

– BenL
2015年2月6日在9:54



表操作为我返回“空集(0.00秒)”

– minhajul
2015年12月2日,17:26

对于Schema-Dummies:请注意,该schemaname可能只是数据库名称。

– BurninLeo
17年12月17日在21:12

#2 楼

对于列:

SHOW FULL COLUMNS FROM table_name;


评论


您好,这是未来的演讲!对于检查此答案的任何人,此方法仅显示排序规则,而不显示字符集。我相信这在MySQL 5上有所改变。

– fideloper
2014年1月28日17:40

@fideloper,使用归类可以告诉字符集。这是因为排序规则的第一部分包括字符集,例如如果排序规则是latin1_swedish_ci,则字符集只能是latin1。如果排序规则是utf8mb4_general_ci,则字符集只能是utf8mb4。

–起搏器
2015年8月20日,下午3:31

这告诉您表字符集。当在create table语法中未指定任何字符集时,它不会告诉您将来创建的表的字符集(为此您将需要模式字符集)。

–HoldOffHunger
16年8月29日在15:28



#3 楼

对于数据库:

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


Cf。这一页。并查看MySQL手册

评论


这只能回答问题的1/3。

– Tobias J
13年8月3日在19:02

@TobyJ,我看不到您在stackoverflow.com/a/4805510/632951抱怨

–起搏器
15年8月20日在4:14

cf代表什么?链接不存在。 @Pacerier

– Yannis Dran
15年8月29日在23:51

这应该合并在最上面的答案中。它真的帮助了我。

– beppe9000
17年1月14日在16:55

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


或-将输出用于创建表的完整SQL:
获取列的排序规则:

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,并键入显示列的数据类型而不是字符集。一些像int(10)varchar(255)...等而不是utf8

– MTK
18-2-21在23:29



我的输出将类型也显示为数据类型@MTK,也许上面是“输出:”部分中的复制粘贴错误。

–tronmcp
19年2月2日,下午2:16

#5 楼

对于表:

SHOW TABLE STATUS将列出所有表。

过滤器使用:

评论


请注意。显示表状态中显示的排序规则不是表的字符集。排序规则告诉您如何对字符进行排序/比较。例如utf8_bin_ci比较数据时不考虑大小写(不区分大小写,因此“ m”和“ M”相同),utf8_bin_cs比较时区分大小写(因此“ m”和“ M”是不同的)。这与表的字符集不同。

–大安
2014年10月8日在7:43

@Daan,别再散布错误信息了。请参阅stackoverflow.com/questions/1049728/…,使用排序规则可以告诉字符集。

–起搏器
15年8月20日在3:56

#6 楼

对于数据库:

只需使用以下命令:

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


评论


这是来自官方mysql文档的答案。 dev.mysql.com/doc/refman/8.0/en/charset-database.html

–里克
7月30日,3:13

#7 楼

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命令行中,按回车键,即可获得每个数据库中每个表中每一列的字符集:)

–杰里·克里诺克(Jerry Krinock)
16-10-1在16:48

@JerryKrinock您将获得当前数据库的每一列,如果未选择任何数据库,则不会获得任何内容。

– Ortomala Lokni
18年4月27日在8:12

#8 楼

我总是只看SHOW CREATE TABLE mydatabase.mytable

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

评论


mysql数据库中可以具有默认字符集

–詹姆斯
09年6月26日在15:28

从information_schema.schemata中选择default_character_set_name是不够的,因为您无法确定哪个行与哪个数据库相关。使用来自information_schema.schemata的select default_character_set_name,schema_name或简单地:从information_schema.schemata选择*。

–起搏器
2015年8月20日在4:10



我使用SELECT * FROM information_schema.SCHEMATA WHERE SCHEMA_NAME ='<数据库名称>'\ G;它很好用:)谢谢!

–桑卡普
2015年11月6日10:41



#9 楼

要查看数据库的默认排序规则:
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;


#10 楼

对于表和列:

show create table your_table_name


评论


它会告诉您用于创建当前表的完整SQL,其中应包含它的字符集。

–詹姆斯
2012年7月14日在18:09

另外,如果该列未声明特定的字符集,则它使用的是表的默认字符集。

–起搏器
15年8月20日在4:03

#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> 


评论


这不是在top和stackoverflow.com/a/1049753/632951上第一个答案的重复吗?

–起搏器
2015年8月20日在4:18



@Pacerier您实际上将我的答案与这些答案进行了适当的比较吗?

– sjas
2015年9月1日于12:43

#12 楼

对于数据库:

SHOW CREATE DATABASE "DB_NAME_HERE";



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

评论


MySQL中“默认字符集/排序规则始终为拉丁”所需的引用。

–起搏器
15年8月20日在4:20



需要引用吗?您曾经使用过MySQL数据库吗?每个人都知道默认字符集/排序规则是latin1_swedish_ci,因为MySQL的创建者Monty Widenius是瑞典人,开始时并没有想像中的那样。

–斯潘塞·威廉姆斯
17-2-21在20:07



#13 楼

正如许多人先前所写,SHOW FULL COLUMNS应该是获取列信息的首选方法。
缺少的是在不直接访问元数据表的情况下获取字符集的方法: >

#14 楼

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

#15 楼

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