我使用PHP 5.5,當我嘗試在MySQL數據庫中插入UTF-8字符時,PDO在第一個非ASCII字符處將其切斷。PDO切斷UTF-8字符的字符串
我已經設置我的連接是:
(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
上使用了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));
凡$text = "référence"
(只保存在數據庫中的字母R,但沒有口音節省一切)和$顏色是用於測試目的,一個空字符串和$id
是2
。
'var_dump($ text)'yield'string(11)「référence」'? –
是的,它確實是。 –
在這個問題上也試過了解決方案@MarcusAdams - 沒有成功。傑克可能會做些什麼。 –