我无法将数据从 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 个表。如果我必须手动修改它们,那将花费很长时间。
最佳答案
既然您提到了“奇怪的字符”,我怀疑“从 latin1 更改为 utf8”不是真正的任务,而是要修复在 INSERT 期间发生的某种困惑。
大概有5个case要处理。我们还不知道你有哪种情况。请提供
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
。 DEFAULT
是可选的。
HEX('ĂĹ') = 'C482C4B9'
-- 看起来您正在使用一些东欧语言,也许使用 utf8,也许不是。请提供进一步的细节。 Ă
前后发生了什么?
“怪异字符”的修复可能在 my blog 中,但需要详细信息直接指向您。
关于php - 将 MySQL 数据库编码从 Latin1_swedish 更改为 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28297488/