Я пишу веб-приложение, используя PHP Codeigniter. Я получаю данные, которые могут быть на любом языке, и сохраняю их в своей БД.
Для параметров сортировки БД MYSQL установлено значение utf8_unicode_ci.
Для codeigniter в database.php я установил это:
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_unicode_ci';
Когда я запускаю следующую вставку в моей БД:
insert into user (name,id) values ('John Temirtaş', 2)
Я получаю эту ошибку:
Неверное строковое значение: '\ xC5 \ x9F' для столбца «имя» в строке 1
Есть проблема с s. Это турецкий характер.
Пока я пробовал это во время отладки
print_r($name)
John Temirtaş
print_r("Encoded Name: ".utf8_encode($name))
Encoded Name: John TemirtaÅ
print_r("Decoded Name".utf8_decode($name)
Encoded Name: John Temirta?
print_r("Decoded-Encode Name: ".utf8_decode(utf8_encode($name)))
Decoded-Encode Name: John Temirtaş
Я попытался сохранить Джона Темиртаа в БД, и он отлично работает. Поэтому я думаю, что я мог бы utf8_encode($name)
перед сохранением в БД и utf8_decode перед отображением. Просто последнее не сработает. ВЫ ДОЛЖНЫ ДОБАВИТЬ mb_internal_encoding("UTF-8");
в начало вашего php-скрипта.
Как правильно кодировать данные, чтобы они вставлялись?
СПАСИБО ВСЕМ, ЧТО ВЫ ПОМОГАЕТЕ ЗДЕСЬ, ЧТО РАБОТАЕТ!
- Откройте рабочий стол MySql. Установить
кодировка символов и сопоставление
пользовательская таблица. Charset: utf-8
Сортировка: utf8_unicode_ci
- Установить сопоставление столбца name
до utf8_unicode_ci . Готово.
Вставка должна работать.
Спасибо за вашу помощь.