代码之家  ›  专栏  ›  技术社区  ›  Dan YOU

mysql:latin1->utf8。将字符转换为其多字节等价物

  •  0
  • Dan YOU  · 技术社区  · 16 年前

    里面有张桌子 拉丁语1 现场 CP1252 我想要张桌子 UTF8 现场 UTF-8

    我已经做到了:

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

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

    γ

    这个SQL不能按我的要求工作 -它不能转换 γ 和; γ 数据库中的字符与其多字节等价物之间的关系

    请帮忙。 坦克

    3 回复  |  直到 16 年前
        1
  •  2
  •   Residuum    16 年前

    AS this blog post 说,使用MySQL ALTER TABLE CONVERT 语法是个坏主意。导出数据,转换表,然后重新导入数据,如博客文章中所述。

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

        2
  •  2
  •   Dan YOU    16 年前

    我是个傻瓜。 集名 失踪了。

    我现在知道的是:

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

    2)列的字符集优先!,表和db字符集优先。它们主要用于设置默认值。(不完全肯定最后一句话)

    3) SET NAMES 非常 重要的。德语字符可以是拉丁语1,并且在正确设置名称时,可以正确放置在utf8表中(由MySQL自动编码)。无论表编码是什么,服务器都可以以您想要的编码方式向网页发送数据。可重新编码输出

    4)如果在编码A中有一列,在编码B中有一列,你比较它们(或者用类似的方式),MySQL会悄悄地转换它们,使它们看起来像是在一个编码中。

    5)MySQL很聪明。除非类型为 二元的 . 它总是以字符的形式运行!他希望“拉丁语1”等于“utf8”,如果他 知道 数据编码

        3
  •  0
  •   Rik Heywood    16 年前

    既然您声称现在可以取回s**t,这就意味着数据库中的字符已被修改。

    如何访问MySQL中的数据?如果您使用的是诸如PHP之类的编程接口,那么您可能需要告诉该接口需要什么字符编码。

    例如,在PHP中,您需要调用 mysql_set_charset("utf8"); 但也可以使用 SET NAMES utf8

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