我正在处理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`
最后有两个问题:
CONVERT TO CHARACTER SET
正在一台服务器上工作,而不在其他CONVERT TO CHARACTER SET
,我遇到的只有一点不同,它并没有隐式地将所有列转换为指定的字符集。有人可以帮我理解发生的事情吗?
提前谢谢。
答案 0 :(得分: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