让MySQL显示用于特定列的编码

gru*_*ler 6 mysql encoding

MySQL手册(http://dev.mysql.com/doc/refman/5.1/en/charset-syntax.html)说:

字符集和排序规则的默认设置分为四个级别:服务器,数据库,表和列.以下部分中的描述可能看起来很复杂,但实践中发现多级默认会导致自然而明显的结果.

我想查询一个特定的CHAR/VARCHAR/TEXT列,找出MySQL认为的编码方式.是否有捷径可寻?我知道我可以SHOW CREATE TABLE <table>用来查看表的默认字符集,但是我想在列级别上做同样的事情,因为文档表明它可能与表默认值不同.

Mic*_*ski 14

您可以在information_schema.COLUMNS表格中执行此操作.

SELECT 
  COLUMN_NAME,
  TABLE_NAME,
  CHARACTER_SET_NAME,
  COLUMN_TYPE,
  COLLATION_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'your_database_name'
Run Code Online (Sandbox Code Playgroud)

Gallery2数据库的示例输出:

+-------------------------+--------------------------+--------------------+--------------+-----------------+
| COLUMN_NAME             | TABLE_NAME               | CHARACTER_SET_NAME | COLUMN_TYPE  | COLLATION_NAME  |
+-------------------------+--------------------------+--------------------+--------------+-----------------+
| g_accessListId          | g2_AccessMap             | NULL               | int(11)      | NULL            |
| g_userOrGroupId         | g2_AccessMap             | NULL               | int(11)      | NULL            |
| g_permission            | g2_AccessMap             | NULL               | int(11)      | NULL            |
| g_itemId                | g2_AccessSubscriberMap   | NULL               | int(11)      | NULL            |
| g_accessListId          | g2_AccessSubscriberMap   | NULL               | int(11)      | NULL            |
| g_id                    | g2_AlbumItem             | NULL               | int(11)      | NULL            |
| g_theme                 | g2_AlbumItem             | utf8               | varchar(32)  | utf8_general_ci |
| g_orderBy               | g2_AlbumItem             | utf8               | varchar(128) | utf8_general_ci |
| g_orderDirection        | g2_AlbumItem             | utf8               | varchar(32)  | utf8_general_ci |
Run Code Online (Sandbox Code Playgroud)