php - 将 MySQL 数据库编码从 Latin1_swedish 更改为 UTF-8

标签 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 个表。如果我必须手动修改它们,那将花费很长时间。

最佳答案

既然您提到了“奇怪的字符”,我怀疑“从 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 SETDEFAULT 是可选的。

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

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

关于php - 将 MySQL 数据库编码从 Latin1_swedish 更改为 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28297488/

相关文章:

PHP 套接字绑定(bind)/监听在方法(类)中使用时不起作用

php - Symfony/propel 表单保存具有附加属性的对象

php - jquery 使搜索自动建议列表从下到上打开(相反方向)

mysql - mysql 24小时时间窗口中检索数据的日期条件

symfony - 重定向已登录用户 Symfony2

symfony - JMSI18nRoutingBundle 可以使用 HTTP Accept-Language 数组吗?

php - 一对多关系中的 Laravel Eloquent orderBy() 父表字段

mysql - 架构设计的问题

mysql - 无法找到两个日期 MySQL 之间的小时数

symfony - FOSElasticaBundle 多重嵌套查询