首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:转换字符集失败?

问MySQL:转换字符集失败?
EN

Database Administration用户
提问于 2014-04-21 16:23:44
回答 2查看 975关注 0票数 0

我正在将数据库从latin1迁移到utf8字符集/排序规则。

我编写了一个简单的脚本,循环遍历我的所有表并执行以下语句:

更改表{数据库}.{table}转换为字符集utf8排序规则utf8_unicode_ci;

这对于几乎所有的表都很有用,但是我注意到有几个表无法转换-- ALTER成功了,没有错误,但是排序规则仍然是latin1。

经过进一步的检查,我注意到这个特定的表中只有Integer列,所以这也许就是原因?但是,如果我以后添加了VARCHAR,那么至少应该更改表排序规则吗?

编辑**

我使用phpMyAdmin的UI来转换表,它给了我一个稍微不同的命令:

ALTER {table}默认字符集utf8排序规则utf8_unicode_ci

这些声明之间的区别是什么?为什么其中一种能起作用,而另一种则不行?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2014-04-22 03:36:00

ALTER TABLE ... DEFAULT CHARACTER SET ...命令设置表的默认字符集和排序规则。它不影响现有的VARCHAR/TEXT列及其数据。只有新创建的字段才会使用指定的字符集和排序规则。

ALTER TABLE ... CONVERT TO CHARACTER SET ...命令更改所有现有VARCHAR/TEXT字段的字符集和排序规则(并转换数据)。实际上,它还应该更改表的默认字符集。这里没有明确说明:http://dev.mysql.com/doc/refman/5.5/en/alter-table.html,但它以这种方式工作。在我的MySQL 5.1.45中,默认的字符集是由CONVERT操作更改的,即使它不包括VARCHAR-字段。此外,如果无法存储新的数据长度,CONVERT操作可能会更改数据类型。

票数 1
EN

Database Administration用户

发布于 2015-07-28 14:18:53

2014年4月22日,南厄斯特回答了这一问题。我最近的经验是,如果表没有包含任何基于文本的列,则转换将不会将排序规则添加到表定义中。Alter语法似乎成功,没有显示任何警告。

语法:将表表名转换为字符集utf8排序规则utf8_unicode_ci;

在这种情况下使用默认字符集可以确保显示create表的输出(排序规则字段)显示为"COLLATE=utf8_unicode_ci“。

语法:修改表表名字符集utf8整理utf8_unicode_ci;

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/63610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档