Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP特殊字符分析错误_Php_Mysql_Xml_Unicode_Encoding - Fatal编程技术网

PHP特殊字符分析错误

PHP特殊字符分析错误,php,mysql,xml,unicode,encoding,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\u swedish\u

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

SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xEAm-Kh\xEA...'
当我检查XML中的数据时,它显示为
iêm-Khê

因此,特殊字符
ê
正在转换为
xEA

这是什么?

如何解决该问题以维护其原始字符并将其放入数据库?

仅供参考,以下是一些信息。

  • 我的整个MySQL数据库本身使用的是
    latin1\u swedish\u ci
  • 但该表和列使用的是
    utf8\u general\u ci
  • **当我手动将
    iêm-Khê
    值直接复制/粘贴到MySQL记录中时,它被保存。(我的意思是,MySQL接受这种特殊字符。)所以我认为问题在于编码方面

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

命令:

更改列:


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

- 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"));
以下链接提供了一些其他有用的信息:
您应该为mysql数据库定义
UTF-8字符集
,通过
默认值
它过去是
拉丁字符集
,我们可以定义
UTF-8
以及
表定义
或在
数据库
创建时

吃饭

 create table `my_table` (.....

  .... ) DEFAULT CHARSET=utf8;
到数据库

CREATE DATABASE mydb  DEFAULT CHARACTER SET utf8 

如果'm worn

使用UTF-8字符集设置为mysql DB:)OMG,请更正!!我发现我的DB上使用了
latin1\u swedish\u ci
,我可以安全地将其更改为
utf-8
?因为我的数据库现在很大,里面有重要的记录。轻松更改是否安全?是的,我们可以使用它,首先使用
alter
命令使用示例数据库并测试它,如果您要从创建开始,您可以按照下面的答案将字符集定义为数据库或表的默认值。OMG!!我发现我的DB上使用了
latin1\u swedish\u ci
,我可以安全地将其更改为
utf-8
?因为我的数据库现在很大,里面有重要的记录。那么容易改变是安全的吗?@4lvin 首先在测试数据库中完成所有操作。实际上我正在使用Drupal。上帝坝*我从来都不知道Drupal默认DB编码使用的是Stup*d encode排序规则**,但当我只检查该表时,它使用的是
utf8\u general\u ci
。这有什么意义吗?或者,我还需要更改整个db字符集吗?@4lvin同时检查该列。好的,我使用php
utf8\u encode()
函数得到了它。在我编辑的问题中,这不是DB问题。谢谢:)
 create table `my_table` (.....

  .... ) DEFAULT CHARSET=utf8;
CREATE DATABASE mydb  DEFAULT CHARACTER SET utf8