Mysql &引用;“转换为字符集”;不';t将只有整数列的表转换为指定的字符集

Mysql &引用;“转换为字符集”;不';t将只有整数列的表转换为指定的字符集,mysql,utf-8,mysql-5.6,Mysql,Utf 8,Mysql 5.6,我在两台服务器上工作,每台服务器都有类似的配置,包括特定于字符集和排序规则的mysql变量,这两台服务器都运行mysql服务器和客户端5.6.x。默认情况下,所有表都使用拉丁语1,包括仅包含整数列的表,但在运行 ALTER TABLE `table_name` CONVERT TO CHARACTER SET `utf8` COLLATE `utf8_unicode_ci` 对于每个服务器中的所有表,只有一个服务器正在将所有表转换为utf8 我已经尝试过的: 在运行上述命令之前,已将默认数据

我在两台服务器上工作,每台服务器都有类似的配置,包括特定于字符集和排序规则的mysql变量,这两台服务器都运行mysql服务器和客户端5.6.x。默认情况下,所有表都使用拉丁语1,包括仅包含整数列的表,但在运行

ALTER TABLE `table_name` CONVERT TO CHARACTER SET `utf8` COLLATE `utf8_unicode_ci` 
对于每个服务器中的所有表,只有一个服务器正在将所有表转换为utf8

我已经尝试过的:

在运行上述命令之前,已将默认数据库字符集(字符集数据库)转换为utf8

解决方案已经对我有效了(但仍不确定为什么有效)

最后有两个问题:

  • 转换为字符集
    在一台服务器上工作,而在另一台服务器上不工作
  • 这个解决方案已经对我起作用了,它类似于
    转换为字符集
    ,但我遇到的唯一区别是,它不会隐式地将所有列转换为指定的字符集
  • 有人能帮我理解发生了什么事吗


    提前感谢您。

    IIRC,这是一个最终被修复的错误。请参阅bugs.mysql.com。(这个bug可能是从4.1版开始就存在的,当时真正添加了
    字符集
    。)

    我倾向于在两个地方明确表达,从而避免您提出的问题:

    • 在执行
      createtable
      时,我会明确地说出我需要的
      字符集。这避免了依赖于数据库创建时(可能是几年前)建立的默认值
    • 添加列(
      altertableaddcolumn…
      )时,我会检查(通过
      showcreatetable
      )以查看该表是否已经具有所需的字符集。即使如此,我可能会为列显式地声明
      字符集
      。再说一遍,我不相信这张桌子的历史
    注意:我是从显式SQL执行这些查询,而不是从一些可能“帮助”我的UI执行这些查询

    后续

    @HBK发现。从中,我怀疑这是用户“应该”做的事情:

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

    您能否在此命令之前和之后发布表架构以指出问题所在?顺便说一下,整数没有字符集。我知道整数没有字符集。我不确定模式会有什么帮助,因为我提到了所有整数列在没有
    CONVERT
    的情况下对alter进行标识,实际上更改了任何文本列?@RickJames不,没有。如果我没有正确传达,请原谅。非常感谢@Rick的回复,感谢你指出了正确的观看位置。我认为mysql bug需要在google或任何搜索引擎上更好地索引,因为我们希望他们在查询时在顶部列出mysql自己的域链接,但很少有人能控制它。对于其他人,这里是mysql bug报告的链接:Sveta在这里提出了一个很好的观点:“如果你想将默认字符集更改为这样的表,请使用”默认字符集=utf8;而不是“convert”。@HBK--您可能注意到我太懒了,没有搜索bug。我更喜欢雅虎搜索在文档中查找内容:“site:mysql.com关键字…”
    ALTER TABLE ...
        CONVERT TO ...
        DEFAULT CHARACTER SET ...;   -- Do this also