我使用的是 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
and UPDATE
专门使用PDO!
这是该表的 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 ;
我已经尝试将文本设置为 varchar 字段,但这并没有改变任何内容。
PHP 中的实际插入:
$query = $this->db->prepare("UPDATE mytable
SET text = ?,
colors = ?
WHERE id = ?");
$query->execute(array($text, $colors, $id));
Where $text = "référence"
(仅将字母 R 保存在数据库中,但没有重音符号,它会保存所有内容)并且 $colors 是用于测试目的的空字符串,$id
is 2
.