PHP特殊字符分析错误
我正在解析XML并将其放入MySQL。现在MySQL对于某些特定记录的插入显示以下错误: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
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
- **当我手动将
值直接复制/粘贴到MySQL记录中时,它被保存。(我的意思是,MySQL接受这种特殊字符。)所以我认为问题在于编码方面iêm-Khê
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同时检查该列。好的,我使用phputf8\u encode()
函数得到了它。在我编辑的问题中,这不是DB问题。谢谢:)
create table `my_table` (.....
.... ) DEFAULT CHARSET=utf8;
CREATE DATABASE mydb DEFAULT CHARACTER SET utf8