"转换为字符集"不会将只有整数列的表转换为指定的字符集

时间:2017-01-22 16:29:14

标签: mysql utf-8 mysql-5.6

我正在处理2台服务器,每台服务器都有类似的配置,包括特定于字符集和整理的mysql变量,两者都在运行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`

最后有两个问题:

  1. CONVERT TO CHARACTER SET正在一台服务器上工作,而不在其他
  2. 解决方案已经对我有用,类似于CONVERT TO CHARACTER SET,我遇到的只有一点不同,它并没有隐式地将所有列转换为指定的字符集。
  3. 有人可以帮我理解发生的事情吗?

    提前谢谢。

1 个答案:

答案 0 :(得分:1)

IIRC,这是一个最终被修复的错误。请参阅bugs.mysql.com。 (该错误可能是自版本4.1以来存在的,当真正添加CHARACTER SETs时。)

我更喜欢在两个地方明确,从而避免你提出的问题:

  • 在执行CREATE TABLE时,我明确说出了我需要的CHARACTER SET。这可以避免取决于创建数据库时建立的默认,也许是几年前。
  • 添加列(ALTER TABLE ADD COLUMN ...)时,我会检查(通过SHOW CREATE TABLE)以查看表已经是否具有所需的字符集。即便如此,我可能会明确指出该列的CHARACTER SET。再说一遍,我不相信桌子的历史。

注意:我是从显式SQL执行这些查询,而不是从某些可能“帮助”我的UI中执行这些查询。

关注

@HBK找到http://bugs.mysql.com/bug.php?id=73153。从中我怀疑这是用户应该做的事情:

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