【问题标题】:php & mysql converting non- to unicodephp & mysql 将非转换为 unicode
【发布时间】:2011-04-02 05:30:53
【问题描述】:

我的网站上有这样的角色:Fémnyomó

这是一个街道地址,用另一种语言输入(虽然我不知道是哪种语言)。这是数据库设置:

mysql 4.1.2log
charset cp1252 West European (latin1)

我正在使用 PHP,但没有 mbstrings()(虽然我没有对这个地址进行字符串转换,只是回显)。

如果我将 mysql 字符集从 cp1252 更改为 UTF-8 并确保我使用了像 header( 'Content-Type: text/html; charset=UTF-8' ); 这样的东西,那会改善我的情况吗?或者,数据是否因为保存在 cp1252 字符集中而被占用,而我无能为力?原始数据库创建于 2002 年,此后一直在使用/扩展。我们已经升级了服务器并重新导入了转储文件,但遗憾的是我承认没有过多考虑字符集。

如果我受够了,我可能会删除这些字段中的文本,但我希望继续支持 unicode,所以如果我发出 ALTER database_name DEFAULT CHARACTER SET utf8; 将确保正确保存未来的多字节编码,采取至少不考虑存储(让我担心 PHP)?

谢谢-

【问题讨论】:

    标签: php mysql unicode utf-8 cp1252


    【解决方案1】:

    1) 将所有字符集转换为 UTF8:

    ALTER database_name DEFAULT CHARACTER SET utf8;
    

    2) 在页面上的任何查询之前发出这个:

    mysql_query("set names 'utf8'");
    

    3) 使用此标头:

    header( 'Content-Type: text/html; charset=UTF-8' );
    

    4) 插入此元标记:

    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
    

    5) 另外,请阅读:http://www.oreillynet.com/onlamp/blog/2006/01/turning_mysql_data_in_latin1_t.html

    【讨论】:

    • 谢谢。我已经完成了所有 5 个步骤,但仍然得到相同的结果。为了消除可能性,我在 localhost 上的 mysql 监视器中连接(此框正在运行 MySQL 5.1.41-3ubuntu12.3-log)并将这些设置为 utf8(使用show variables 反映)-character_set_client、character_set_connection、character_set_database、 character_set_results、character_set_server、character_set_system。结果是一样的——这直接来自mysql监视器:Fémnyomó ut 1
    • 第 5 步中的那个链接可能最终会成为我所做的。我可能只需要检查这些地址并手动更改它们(在将所有内容转换为 UTF-8 之后)。将 db 转换为 UTF-8 后是否存在任何危险,我最终会使用旧 latin1 字符集中的这些字符?
    • 对于您提到的危险,请备份数据库。如果你搞砸了,你可以恢复。
    • @shamittomar:5 ez 步,+1
    猜你喜欢
    • 1970-01-01
    • 2015-04-20
    • 2011-05-14
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 2014-09-02
    • 2018-09-18
    相关资源
    最近更新 更多