Я использую PHP 5.5, и когда я пытаюсь вставить символ UTF-8 в базу данных MySQL, 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
используя 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 в базе данных, но без акцентов она сохраняет все), а $ colors – пустая строка для тестовых целей, а $id
– 2
.