#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 / collation问题,您可能还需要检查连接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;
评论
对于表和列,只需使用SHOW CREATE TABLE,如stackoverflow.com/questions/57628217/…中所述。