PHP特殊字符解析错误

时间:2012-10-05 04:09:46

标签: php mysql xml unicode encoding

我正在解析XML并将其放入MySQL。现在MySQL对于插入的某些特定记录显示以下错误:

SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xEAm-Kh\xEA...'

当我检查XML中的数据时,它显示为iêm-Khê
因此,特殊字符ê正在转变为xEA
这是什么?

如何解决这个问题以维持&将其原始角色放入数据库?

仅供参考,这里有一些信息:

  • 我的整个MySQL数据库本身正在使用latin1_swedish_ci
  • 但那个TABLE& COLUMN正在使用utf8_general_ci
  • **当我手动将iêm-Khê值复制/粘贴到MySQL Record中时,它会被保存。 (我的意思是,MySQL正在接受特殊字符。)所以我认为问题出在Coding端。

3 个答案:

答案 0 :(得分:1)

经过一些额外的研究后,我遇到了两种可能的解决方案:

- the first option is to use php's utf8_encode() function.
- the second option uses some code with the PDO using set names (though there seemed to be some discussion as to whether or not this worked for everyone.

$handle = new PDO("mysql:host=localhost;dbname=dbname",
    'username', 'password', 
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

以下链接提供了一些其他有用的信息: See here

答案 1 :(得分:0)

您需要将数据库的字符集设置为UTF-8

命令:

ALTER DATABASE db_name CHARACTER SET utf8 COLLATE utf8_general_ci;

要更改列:

ALTER TABLE [table_name] MODIFY
[column_name] [data_type]
CHARACTER SET utf8
COLLATE utf8_general_ci;

答案 2 :(得分:0)

您应该将UTF-8 charset定义为mysql数据库,default曾为latin charset,我们可以定义utf-8以及table definition或在database创作,

到表

 create table `my_table` (.....

  .... ) DEFAULT CHARSET=utf8;

到数据库

CREATE DATABASE mydb  DEFAULT CHARACTER SET utf8 

如果有问题,请纠正我