为什么PHP / MySQL以不同的方式插入我的中文字符?

时间:2010-08-12 04:51:03

标签: php mysql unicode utf-8

Gday All,

尝试使用mysqlnd从PHP插入一些中文字符到MySQL数据库时,我遇到了一个令人困惑的问题。

我有一个接受一些细节的表格,例如内部名称,外部名称,拍摄名称等......

我在表格的所有三个字段中输入“语言测试”(语言测试)。

我使用内部联接提交我的信息,例如:

UPDATE table1 INNER JOIN table2(table1.name = "value1", table2.ext_name = "value2", table2.ext_name = "value3")

两个表和相关字段都设置为utf8_general_ci(我也尝试过utf8_bin)

插入工作正常但是我看到两个值插入到数据库中。

在表1中,我看到“è¯è¨€æμ<试”,在表2中我看到“语言测试”。

可能导致我从同一个php表单中插入完全相同的数据,以便在两个单独的MySQL数据库表中显示不同的内容?

2 个答案:

答案 0 :(得分:3)

  1. 尝试在没有BOM的情况下以UTF-8保存所有文件。

    请参阅byte order mark (BOM)

  2. 使用MySQL进行下一步操作:

    SET NAMES UTF-8
    SET CHARACTER SET UTF-8
    

    请参阅10.1.5. Configuring the Character Set and Collation for Applications

  3. 在根文件夹中创建文件.htaccess,包含下一个内容:

    AddDefaultCharset utf-8
    AddCharset utf-8 *
    <IfModule mod_charset.c>
      CharsetSourceEnc utf-8
      CharsetDefault utf-8
    </IfModule>
    

    请参阅Setting charset in htaccess

答案 1 :(得分:2)

在MySQL中,您不仅需要设置表(或其列)的字符编码,还必须设置PHP和数据库之间连接的字符编码,每次连接时都会这样做。

在PHP中,您可以使用mysql_set_charset(),或者如果您在数据源名称中使用PDO包含charset=UTF-8

这取代了MySQL中的{和PHP推荐它'SET NAMES。在旧版本的PHP中,每次连接时都使用了MySQL命令SET NAMES UTF8