php – PDO以UTF-8字符切断字符串
参见英文答案 >
UTF-8 all the way through????????????????????????????????????13个
我正在使用PHP 5.5,当我尝试在MySQL数据库中插入UTF-8字符时,PDO会在第一个非ASCII字符处将其删除. 我已将我的连接设置为: (DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8',DB_USER,DB_PASS,array(PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)) 我已经尝试了每个人都发布的SET NAMES,但这不起作用,因为问题不在MySQL方面. 当我通过phpMyAdmin插入并直接从MySQL控制台插入时,它可以工作! 问题仅出在使用PDO的INSERT和UPDATE上! 这是表的SQL.全部都是UTF-8,但也许有人知道设置和PDO之间的冲突 CREATE TABLE IF NOT EXISTS `mytable` ( `id` int(11) NOT NULL AUTO_INCREMENT,`id_lang` int(11) NOT NULL DEFAULT '2',`id_tgroup_cat` int(11) NOT NULL,`fieldfor` int(11) NOT NULL,`colors` varchar(100) NOT NULL,`text` text NOT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=34 ; 我已经尝试将text设为varchar字段,并且没有改变任何内容. PHP中的实际插入: $query = $this->db->prepare("UPDATE mytable SET text = ?,colors = ? WHERE id = ?"); $query->execute(array($text,$colors,$id)); 其中$text =“référence”(仅保存数据库中的字母R但没有重音符号可以保存所有内容)和$colors是一个空字符串,用于测试目的,$id为2. 解决方法
这是我的关键线索:
听起来像是UTF-8编码问题.虽然数据库是UTF-8,但从代码到数据库的整个链 – 包括连接 – 应该是UTF-8干净的. $this-> db-> prepare究竟与PHP的PHP连接有什么关系?你所展示的代码有点不清楚.但根据你所展示的内容,或许像这样调整你的查询会有所帮助: $query = $this->db->prepare("SET collation_connection = utf8_bin; SET NAMES utf8; UPDATE mytable SET text = ?,colors = ? WHERE id = ?"); 或许这个: $this->db->exec("SET collation_connection = utf8_bin; SET NAMES utf8;"); $query = $this->db->prepare("UPDATE mytable SET text = ?,colors = ? WHERE id = ?"); 注意我强制添加SET collat??ion_connection = utf8_bin;以及SET NAMES utf8; 通常,您需要确保从连接,数据库到表的整个链都是UTF8清理.我对a similar question here有详细的解答. 但在你的情况下,检查实际的MySQL服务器my.cnf文件.以下将整个链设置为UTF-8: [client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server = utf8_unicode_ci init-connect='SET NAMES utf8' character-set-server = utf8 编辑:由于原始海报表明数据来自HTML5表格,我还认为检查实际HTML5文件本身的BOM(字节顺序标记)也会有所帮助.它应该设置为UTF8.关于what a BOM is are over here的更多细节.特别是Martin Code接受的答案解释了:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |