PHP код воспламенитель сохранить турецкие символы в мой sql - PullRequest
2 голосов
/ 22 мая 2011

Я пишу веб-приложение, используя 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-скрипта.

Как правильно кодировать данные, чтобы они вставлялись?


СПАСИБО ВСЕМ, ЧТО ВЫ ПОМОГАЕТЕ ЗДЕСЬ, ЧТО РАБОТАЕТ!

  1. Откройте рабочий стол MySql. Установить кодировка символов и сопоставление пользовательская таблица. Charset: utf-8 Сортировка: utf8_unicode_ci
  2. Установить сопоставление столбца name до utf8_unicode_ci . Готово. Вставка должна работать.

Спасибо за вашу помощь.

Ответы [ 4 ]

1 голос
/ 24 августа 2012

Попробуйте сделать это перед вставкой записи в базу данных.

$this->db->db_set_charset('latin1', 'latin1_swedish_ci');

// -> latin1- Charset & 
// -> latin1_swedish_ci - Collation

Убедитесь, что в БД установлены одинаковые настройки для таблицы и для столбца таблицы.

1 голос
/ 22 мая 2011

Перед запуском запроса вставки попробуйте сначала выполнить следующий запрос:

mysql_query("SET NAMES 'utf8'");

и посмотрим, поможет ли это.

1 голос
/ 23 мая 2011

Ты все сделал хорошо. Я из Турции, и в каждом проекте, который я разрабатываю, я проверяю следующие вещи:

  • Сохраняется ли мой php файл с UTF8 кодированием ?
  • Сравниваются ли мои таблицы и их поля с utf8_unicode_ci

Не изменяйте параметры codeigniter "char_set" и "dbcollat" .

Если вы это сделаете, проблем не должно быть.

0 голосов
/ 22 мая 2011

Возможно, я не могу точно ответить на то, что вы спрашиваете, но я могу дать несколько общих советов, потому что я использую utf-8 для себя.

  1. Попробуйте ввести этот символ вручную из некоторыхклиент (heidisql - бесплатный).

  2. Когда я работал с GET, все работало не очень хорошо, но с htmlencode, htmlspecialchars .. с такими функциями он работал нормально.

  3. Позже я работал только с POST, поэтому кодирование не требуется, и я реализовал автозаполнение utf-8, которое прекрасно работает.

Я думаю, что стоит попробоватьвещь кодирования и var_dump sql перед вставкой, чтобы убедиться, что введено.

  1. В некоторых сложных ситуациях ситуации кавычки, хранящиеся в переменных, мне очень пригодились, например:

    $ dbq = "\" "; $ sql = $ dbq. Some sql '. $ Dbq;

Я работаю с PHP PDO и у меня никогда не было проблем с utf-8 пока. Надеюсь, что-нибудь из этого поможет!

Я забыл .. Вы сказали, что codeIgniter .. entПолучение значения вручную даст вам уверенность, по крайней мере, где сосредоточиться, дБ или фреймворк (к счастью, я использую мой mvc).Просто попробуйте углубиться в код mvc и посмотрите, как выглядит sql перед вставкой.

...