我无法将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个表。如果我必须手动修改它们,则需要很长时间。
答案 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,但需要详细信息直接指向您。