信息模式显示列的两个字符编码

时间:2015-11-13 17:30:20

标签: mysql character-encoding

我正在按照本指南(https://mathiasbynens.be/notes/mysql-utf8mb4)将MySQL数据库从utf8字符集迁移到uft8mb4。对于我更新的表之一(table1),我得到了来自information_schema的奇怪输出。 table1有四列,每列都列在下面:

data_store VARCHAR(24)
data_group VARCHAR(24)
source_count INT
load_count INT

我已经验证表格中只有4列出现SELECT *。但是,在information_schema上运行以下查询会产生奇数输出。

SELECT column_name, character_set_name FROM information_schema.COLUMNS 
WHERE table_name = "table1";

COLUMN_NAME                                         CHARACTER_SET_NAME                
--------------------------------------------------------------------------------------
data_store                                          utf8                              
data_group                                          utf8                              
source_count                                        <null>                            
load_count                                          <null>                            
data_store                                          utf8mb4                           
data_group                                          utf8mb4                           
source_count                                        <null>                            
load_count                                          <null> 

对于我更新过的任何其他表格,我都没有看到重复的行(具有不同的字符集),并且对于错误和/或如何解决它而感到茫然。任何帮助将不胜感激!

注意:我相信我可以从information_schema中删除不需要的列,但我不确定这是否会破坏任何内容。

1 个答案:

答案 0 :(得分:1)

我认为您在几个不同的数据库模式中看到了来自不同table1表的列。

尝试此操作以验证该声明。

 SELECT table_schema, column_name, character_set_name
   FROM information_schema.COLUMNS 
  WHERE table_name = 'table1'

尝试使用此查询按当前数据库进行过滤。

 SELECT column_name, character_set_name
   FROM information_schema.COLUMNS 
  WHERE table_name = 'table1'
    AND table_schema = DATABASE()

尝试以任何方式更改INFORMATION_SCHEMA数据库。不要删除行,不要添加列或其他任何内容。它应该是只读的。但有时它不是,并且改变它可能会破坏你的MySQL实例。不要问我怎么知道这件事。 : - )