【问题标题】:MySQL Unicode DataMySQL Unicode 数据
【发布时间】:2013-05-01 19:29:50
【问题描述】:

我在一个看起来像这样的表中有数据(基于 SQLYog):

(1) µéÁÂÓ ·Óá¡§

但是当正在读取数据的论坛系统在屏幕上显示它时,它看起来像这样:

(2) ต้มยำทำแกง

第二个输出是正确的(泰语)。

我正在编写一个脚本,它将提取所有这些数据并将其导入新数据库 (MongoDB),但是当我提取数据并回显到浏览器时,我得到的输出类似于上面的第一个 (1) .

如何进行转换,以便在插入(或将其输出到浏览器)时像 (2) 一样正确保存和显示?

我无法输出类似 (2) 的文本,但我能够通过包含在我的 html 中使输出看起来像 (1):

<head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head>

然后在回显数据时:

echo iconv('latin1', 'utf-8', $string);

我确信这很简单,但我对 unicode 等还不够熟悉,无法解决这个问题!谢谢大佬!

更新

我现在又近了一步。我打电话:

mysql_query("SET NAMES 'utf8'");

然后就可以输出 (1) 了:

echo $string;

所以我猜 MySQL 现在正在通过连接为我将 latin1 转换为 utf8,而不是我必须通过 iconv 在 PHP 中执行此操作。

仍然无法将泰语字符输出到浏览器!

【问题讨论】:

    标签: php mysql unicode encoding utf-8


    【解决方案1】:

    您需要确保您的脚本对数据库连接使用 UTF-8 编码,并且您需要确保脚本中所有操作该值的区域都使用对多字节安全的操作人物。最后,如果您在浏览器中显示该值,您需要输出 utf-8 的元标记,就像您似乎已经在做的那样。

    【讨论】:

    • 嘿,感谢您的回复 :) - 我已经涵盖了您提出的所有观点。数据库连接通过 mysql_query("SET NAMES 'utf8'"); 设置为 utf8; - 我也试过 mysql_set_charset('utf8');输出没有区别。没有发生字符串操作,它是直接查询然后回显。
    • 我还对当前论坛如何将数据正确输出到屏幕感到困惑。据我从代码中可以看出,论坛软件没有进行任何特殊的转换等。表格采用 latin1 字符集和 latin1_swedish_ci 排序规则。
    • @RobEvans 各个列的字符集和排序规则可以与整个表不同吗?该列是否使用 unicode 保存此数据?
    【解决方案2】:

    我设法解决了这个问题。

    我从数据库中得到的文本是 windows-874(泰语的代码页)。在我搜索了泰语代码页后,我找到了正确的转换为 utf-8 的路径。一旦我将标题切换到:

    header('Content-type: text/html; charset=windows-874');

    我能够正确看到泰语字符,所以我再次禁用了标题并使用:

    iconv('windows-874', 'UTF-8', $string);

    这会将 windows-874 转换为 utf-8,即使没有标题或元标记,页面仍然可以正确显示。

    所以...给字符集新手上一课 - 找出您的文本可能使用什么代码页进行编码,然后尝试从该代码页转换为 utf-8 :)

    【讨论】:

    • 您应该继续并在这里接受您自己的答案,因为这是您的解决方案。
    • 会做,所以不会让你 2 天 :(
    猜你喜欢
    • 2011-03-01
    • 2010-11-26
    • 1970-01-01
    • 2018-05-04
    • 2018-09-09
    • 2014-07-14
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多