MySQL и PHP кодировки - PullRequest
       55

MySQL и PHP кодировки

2 голосов
/ 24 марта 2011

HI, у меня проблема с этим запросом

SELECT * FROM table WHERE `name` LIKE '%tést%'

HMTL и таблица SQL имеют кодировку utf-8, но, к сожалению, нет mysql_set_charset('utf-8'), а я НЕ умеет его использовать.

Я пробовал с iconv("UTF-8", "ISO-8859-1", $name), но запрос соответствует только test.

Я хочу сопоставить все эти: test, tést, tèst, tëst (как этобудет работать с mysql_set_charset)

edit:

SET NAMES utf8 возможно больше ... база данных равна с кодировкой utf8, к сожалениюсодержимое заполняется из Интернета без mysql_set_charset, ни SET NAMES.

В настоящее время, если эти функции используются, результаты портятся.

version() 5.1.41-3ubuntu12.9

edit2:

когда я использую SET NAMES utf8, это соответствует только tést, и они выглядят как tést

когда я использую iconv("UTF-8", "ISO-8859-1", $name) это соответствует только test

Ответы [ 4 ]

1 голос
/ 24 марта 2011

Перед запросом попробуйте:

mysql_query("SET NAMES 'utf8'", $conn);

* редактирует *

В зависимости от версии MySQL вам также может понадобиться:

mysql_query("SET CHARACTER SET utf8", $conn);

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

ALTER <database_name> DEFAULT CHARACTER SET utf8;

* Больше правок *

После прочтения ваших изменений я думаю, что это проблема с вашей кодировкой HTML / PHP. На странице отправки символов убедитесь, что вы правильно установили заголовки:

header('Content-Type: text/html; charset=UTF-8');

Вы также должны установить это через метатеги:

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

Затем установите многобайтовую кодировку с помощью функции mb_internal_encoding():

mb_internal_encoding("UTF-8");

По умолчанию PHP использует ISO-8859-1.

1 голос
/ 24 марта 2011

Я только что провел быстрый тест, и MySQL работает так, как вы ожидаете, что он будет работать.

Возможно, это способ подключения к базе данных, вы можете попробовать выполнить SET NAMES 'utf8';перед выполнением запросов и посмотрите, поможет ли это!

Также обратите внимание, что mysql_set_charset должен занимать utf8, без черты!См. пример из PHP , чтобы быть уверенным!

Приветствия!

0 голосов
/ 24 марта 2011

Вы пробовали SET NAMES?

mysql_query("SET NAMES utf8"); 
0 голосов
/ 24 марта 2011

попробуйте regexp с нужным регулярным выражением, например

SELECT * ИЗ таблицы, где имя REGEXP #REGULAR EXP HERE #

...