"Convert to character set" 不将只有整数列的表转换为指定的字符集

"Convert to character set" doesn't convert tables having only integer columns to specified character set

我在 2 台服务器上工作,每台服务器都具有相似的配置,包括 mysql 特定于字符集和排序规则的变量,并且都在 运行ning mysql 服务器和客户端 5 上。6.x。默认情况下,所有表都在 latin1 中,包括只有整数列的表,但是当我 运行

ALTER TABLE `table_name` CONVERT TO CHARACTER SET `utf8` COLLATE `utf8_unicode_ci` 

对于每台服务器中的所有表,只有一台服务器将所有表转换为 utf8。

我已经尝试过的:

在 运行 上面列出的命令

之前将默认数据库字符 (character_set_database) 设置为 utf8

解决方案已经为我工作(但仍然不确定为什么它有效)

ALTER TABLE `table_name` CHARACTER SET = `utf8` COLLATE `utf8_unicode_ci`

最后还有2个问题:

  1. CONVERT TO CHARACTER SET 在一台服务器上工作,而不在其他服务器上工作
  2. 解决方案已经为我工作,类似于 CONVERT TO CHARACTER SET,我遇到的唯一不同是,它不会隐式地将所有列转换为指定的字符集。

有人可以帮助我了解发生了什么吗?

提前致谢。

IIRC,这是一个最终被修复的错误。参见 bugs.mysql.com。 (这个bug大概是从4.1版本开始就存在的,当时确实添加了CHARACTER SETs。)

我更愿意在两个地方明确说明,从而避免您提出的问题:

  • 在做CREATE TABLE的时候,我明确地说出我需要什么CHARACTER SET。这避免了依赖于创建数据库时建立的 default,也许是几年前。
  • 添加列 (ALTER TABLE ADD COLUMN ...) 时,我检查(通过 SHOW CREATE TABLE)以查看 table 是否已经 具有所需的字符集。即便如此,我可能会为该专栏明确声明 CHARACTER SET。同样,我不相信 table.
  • 的历史

注意:我正在从明确的 SQL 执行这些查询,而不是从某些 UI 可能是 "helping" 我。

关注

@HBK 发现 http://bugs.mysql.com/bug.php?id=73153。从中,我怀疑这是 'should be' 用户所做的:

ALTER TABLE ...
    CONVERT TO ...
    DEFAULT CHARACTER SET ...;   -- Do this also