Ограничение внешнего ключа с помощью UTF-8

#php #mysql #encoding #utf-8 #foreign-keys

#php #mysql #кодирование #utf-8 #внешние ключи

Вопрос:

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

 echo mb_detect_encoding($_POST['province']);
  

Я получаю ASCII для всего, что не содержит специальных символов, и я получаю UTF-8 для всего, что содержит. Однако все эти значения извлекаются из самой базы данных, поэтому это сбивает меня с толку. Так ли это должно работать?

Еще одна вещь, которая не работает, — это мое ограничение внешнего ключа; Я не могу ввести значения из выпадающего списка, который снова извлекает значения из базы данных, поэтому.

Когда я использую

 echo mb_detect_encoding($_POST['province']);
echo $_POST['province'];
  

Я получаю

 UTF-8
Galápagos
  

Который я не могу ввести в базу данных в таблице отчетов из-за ограничения внешнего ключа в таблице провинций. Однако значение поступает непосредственно из таблицы провинций. Я здесь схожу с ума.

Однако я получаю

 ASCII
Carchi
  

Для другой провинции в Эквадоре, и это значение попадает прямо в базу данных. Что я здесь делаю не так?

Ответ №1:

Это может быть случай, когда требуется правильно установить кодировку клиента. Попробуйте это после первоначального подключения к mysql:

 mysql_query("SET NAMES 'utf8'")
  

Комментарии:

1. Спасибо 🙂 Это сделало это! Должен ли я помещать это везде, где я обращаюсь к базе данных? Вставка в базу данных? Чтение из него?

2. А, я понимаю, что вы имели в виду. Я просто поместил это на свой connect.php страница, поэтому она напоминает клиенту каждый раз. Круто, спасибо 8)