首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将MySQL DB编码从Latin1_swedish更改为UTF8

问将MySQL DB编码从Latin1_swedish更改为UTF8
EN

Stack Overflow用户
提问于 2015-02-03 19:12:04
回答 3查看 712关注 0票数 2

我不能把数据从Latin1_swedish转换成UTF-8。

应用程序基于Symfony2,数据库采用MySQL。

我已经尝试过这个查询:

代码语言:javascript
复制
ALTER TABLE <tablename> CONVERT TO CHARACTER 
SET utf8 COLLATE utf8_unicode_ci

和:

代码语言:javascript
复制
ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8;

我想要一个解决方案,做所有的表和列,因为MySQL数据库有1000个表。如果我必须手动修改它们,这将花费太长的时间。

EN

回答 3

Stack Overflow用户

发布于 2015-04-21 11:39:55

既然您提到了“奇怪的字符”,我怀疑“从latin1更改为utf8”并不是真正的任务,而是为了修复插入过程中发生的某种混乱。

大约有5个案例需要处理。我们还不知道你接的是哪个案子。请提供

要对某些包含非ascii文本的单元格执行change.

  • SELECT col, HEX(col) ...操作的表的
  • SHOW CREATE TABLE。

让我们回顾一下这些尝试:

代码语言:javascript
复制
ALTER TABLE <tablename> CONVERT TO CHARACTER  SET utf8;

这假设该表被声明为latin1,并且正确地包含latin1字节,但是您希望将其更改为utf8。因为在latin1中不存在'Ă‘和'Ĺ’,所以这个ALTER感觉非常错误。

代码语言:javascript
复制
ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8;

与上面的类似,但是一次只工作一列,并且在MODIFY子句中需要正确的东西。因此,这将是相当繁琐的。

代码语言:javascript
复制
ALTER DATABASE databasename DEFAULT CHARACTER SET utf8;

仅为在该databasename中创建的任何新表设置默认CHARACTER SET。单词DEFAULT是可选的。

HEX('ĂĹ') = 'C482C4B9' --所以看起来您正在使用某种东欧语言,可能使用utf8,也可能不使用。请提供更多详细信息。Ă之前和之后发生了什么

“奇怪字符”的修复可能在my blog中,但需要详细信息来直接指出。

票数 1
EN

Stack Overflow用户

发布于 2015-02-03 19:17:18

如果你想改变整个数据库,你应该运行这个命令:

代码语言:javascript
复制
ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
票数 0
EN

Stack Overflow用户

发布于 2015-02-03 19:54:45

你试过这个吗?

代码语言:javascript
复制
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28297488

复制
相关文章

相似问题

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