将MySQL DB编码从Latin1_swedish更改为UTF-8

时间:2015-02-03 11:12:04

标签: php mysql symfony encoding utf-8

我无法将Latin1_swedish的数据转换为UTF-8。

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

我已经尝试过这个查询:

ALTER TABLE <tablename> CONVERT TO CHARACTER 
SET utf8 COLLATE utf8_unicode_ci

ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8;

我想要一个能够完成所有表和列的解决方案,因为MySQL数据库有1000个表。如果我必须手动修改它们,则需要很长时间。

3 个答案:

答案 0 :(得分:0)

如果您想要更改整个数据库,则应运行以下命令:

ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

答案 1 :(得分:0)

你试过这个吗?

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

答案 2 :(得分:0)

既然你提到了“奇怪的字符”,我怀疑“从latin1更改为utf8”是真正的任务,而是修复INSERT期间发生的某种混乱。

大约有5个案件需要处理。我们还不知道你有哪种情况。请提供

  • SHOW CREATE TABLE表示您要更改的表格。
  • SELECT col, HEX(col) ...表示某些包含非ascii文本的单元格。

让我们回顾一下尝试:

ALTER TABLE <tablename> CONVERT TO CHARACTER  SET utf8;

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

ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8;

与上面类似,但一次只能运行一列,并且需要MODIFY子句中正确的内容。因此,这将是非常乏味的。

ALTER DATABASE databasename DEFAULT CHARACTER SET utf8;

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

HEX('ĂĹ') = 'C482C4B9' - 所以看起来你正在使用一些东欧语言,也许使用utf8,也许不是。请提供进一步的细节。 Ă之前和之后发生了什么?

“怪异角色”的修复可能在my blog,但需要详细信息直接指向您。