2013-06-26 4 views
0

У меня есть таблица в mysql DB, которая содержит специальный символ, такой как Ø, Æ и т. Д. Я не могу найти эти поля, когда я запускаю поиск с помощью php. но когда я запускаю тот же sql в phpmyadmin, я получаю результаты. это структура таблицы:php mysql search со специальным символом

CREATE TABLE IF NOT EXISTS `clientinfo` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `adresse` varchar(160) NOT NULL, 
    `gatenavn` varchar(20) NOT NULL, 
    `husnr` varchar(20) NOT NULL, 
    `bokstav` varchar(2) NOT NULL, 
    `postnr` varchar(20) NOT NULL, 
    `poststed` varchar(60) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=398 ; 

Это пример запроса:

SELECT * FROM clientinfo WHERE gatenavn = 'EKRAVEIEN' AND husnr = '1' AND postnr = '2010' AND poststed = 'STRØMMEN' 

, когда я запустить этот запрос в PHPMyAdmin, я получить результат; но не получается, когда я запускаю php. Я использую mysqli. нужна помощь.

+0

Проверьте кодировку html-документа и установите его в utf8; USE 'AddDefaultCharset UTF-8' в вашем httpd.conf Установите' default_charset = "utf-8"; 'в файле php.ini – cipher

+0

возможный дубликат [UTF-8 на всем пути] (http: // stackoverflow .com/questions/279170/utf-8-all-the-way-through) –

ответ

2

установка Try:

SET NAMES utf8;

до вашего запроса в той же сессии тузд

+0

На самом деле это работает, когда я использую обычные функции php mysql_query. но я использую mysqli.для этого я попытался: $ mysqli-> set_charset ('utf8'); но не работает. –

+1

@ Imrul.H - Вы также назвали 'set_charset ('utf-8')' перед установкой данных в базу данных? Если вы запросите данные с UTF-8, который был вставлен в другую кодировку, это не сработает, конечно. Попробуйте добавить новую строку и сделать запрос позже. – martinstoeckli

+0

Привет, когда я использую set_charset ('utf-8') перед вставкой, тогда «STRØMMEN» вставляет как «STR». Я использую Collation как «utf8_general_ci» в базе данных mysql. –

-1

Попробуйте использовать htmlspecialchars функции PHP.

string htmlspecialchars (string $string , int $flags = ENT_COMPAT | ENT_HTML401 
         , string $encoding = 'UTF-8' , bool $double_encode = true) 

Вы можете изменить encoding данные вашей строки. Например KOI8-R для русских символов

+0

какой хороший это сделал бы? Если 'Ø' - это буквально в базе данных, то поиск' &Oring; 'все равно не найдет ничего. –

+0

Извините, я подумал о магазине et search, используя htmlspecialchars. Забудьте об этом, если другие решения (набор символов) работают. – Marcassin

-1

Это может быть проблема с файлом php.ini, ваш Apache Webserver или кодировкой вашего HTML-документа или вашего MySQL

пару вещей, чтобы:

Всегда убедитесь, что ваш charset установлен в utf8 в вашем HTML мета-теги

набор

default_charset = "utf-8"; 

в файле php.ini

И добавить

AddDefaultCharset UTF-8 

к вашему httpd.conf, если вы вывода Юникода символов

0

Если у вас есть доступ к файлу конфигурации MySQL, установите эти параметры в my.cfg :

[client] 
default-character-set=utf8 

[mysql] 
default-character-set=utf8 

[mysqld] 
collation-server = utf8_unicode_ci 
init-connect='SET NAMES utf8' 
character-set-server = utf8 
2

Сообщите вашему экземпляру соединения, чтобы доставить UTF-8 перед выполнением запросов. В MySqli вы можете вызвать функцию set_charset(), после чего объект соединения будет доставлять UTF-8.

Вызов этой функции делает вас независимыми от конфигурации базы данных, при необходимости соединение преобразует возвращенные данные. Конечно, это быстрее, если преобразование не требуется, поэтому настройка конфигурации тоже хорошая.

// tells the mysqli connection to deliver UTF-8 encoded strings. 
$db = new mysqli($dbHost, $dbUser, $dbPassword, $dbName); 
$db->set_charset('utf8'); 
Смежные вопросы