【问题标题】:Mysql: latin1-> utf8. Convert characters to their multibyte equivalentsmysql: latin1-> utf8。将字符转换为其多字节等价物
【发布时间】:2009-11-11 11:34:27
【问题描述】:

latin1中有一个表格,cp1252中有一个站点 我想在 utf8 中有表格,在 utf-8

中有网站

我已经完成了:

1) 在网页上:Content-Type: text/html;charset=utf-8

2) mysql:ALTER TABLE XXX CONVERT TO CHARACTER SET utf8

_

此 SQL 无法按我的意愿工作 - 它不会将数据库中的 äü 字符转换为其多字节等价物

请帮忙。 坦克

【问题讨论】:

    标签: php mysql encoding


    【解决方案1】:

    正如this blog post 所说,使用MySQL 的ALTER TABLE CONVERT 语法是一个坏主意[TM]。导出数据,转换表格,然后重新导入数据,如博文中所述。

    另一个想法:您是否通过 /etc/my.cnf 或 mysqli::set-charset 设置默认客户端连接字符集。

    【讨论】:

      【解决方案2】:

      我一直是个傻瓜。 SET NAMES 不见了。

      我现在知道的:

      1) 每次更改列的字符集时,都会重新编码实际数据!将字段更改为二进制以查看。

      2) 列的字符集优先!,表和db字符集在优先级之后。它们主要用于设置默认值。 (不是 100% 确定最后一句话)

      3) SET NAMES 非常很重要。当您正确设置名称时,德语字符可以进入 latin1 并正确放置在 utf8 表中(由 Mysql 静默重新编码)。无论表格编码是什么,服务器都可以使用您想要的编码将数据发送到网页。可以重新编码输出

      4) 如果有一个编码 A 的列和一个编码 B 的列,并且你比较它们(或使用 LIKE),Mysql 会默默地转换它们,使它们看起来像是在一个编码中

      5) Mysql 很聪明。除非类型是 binary,否则它不会像处理字节那样处理文本。它总是作为字符运行!如果他知道数据编码

      ,他希望 latin1 中的 ё 等于 utf8 中的 ё

      【讨论】:

        【解决方案3】:

        既然你声称你现在得到了 s**t ,这表明字符在数据库中被修改了。

        你是如何访问 mysql 中的数据的?如果您使用的是 PHP 等编程接口,那么您可能需要告诉该接口预期的字符编码。

        例如,在 PHP 中,您需要调用 mysql_set_charset("utf8"); 之类的东西,但也可以使用 SET NAMES utf8 的 SQL 查询来完成

        然后,您还需要确保显示文本的任何内容都知道它是 utf8 并且使用适当的编码呈现。例如,在网页上,您需要将内容类型设置为 utf-8。类似Content-Type: text/html;charset=utf-8

        【讨论】:

          猜你喜欢
          • 2010-12-04
          • 2012-03-13
          • 1970-01-01
          • 2010-11-29
          • 2011-05-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-20
          相关资源
          最近更新 更多