2013-06-26 170 views
0

我在mysql數據庫中有一個表,其中包含像Ø,Æ等特殊字符。我用php運行搜索時找不到這些字段。但是當我在phpmyadmin中運行相同的sql時,我得到了結果。 這是表結構:帶特殊字符的php mysql搜索

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; 在你的httpd.conf中使用'AddDefaultCharset UTF-8' 在你的php.ini文件中設置'default_charset =「utf-8」;' – cipher

+0

[UTF-8直通]可能的重複(http:// stackoverflow .com/questions/279170/utf-8-all-the-way-through) –

回答

2

嘗試設置:

SET NAMES utf8;

在同一個MySQL的會議上查詢之前

+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」。我在MySQL數據庫中使用Collat​​ion作爲「utf8_general_ci」。 –

-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

對不起,我想到了使用htmlspecialchars的商店和搜索。忘記它,如果其他解決方案(set charset)工作。 – Marcassin

-1

這可能是您的php.ini文件,你的Apache服務器,或字符集HTML文檔或你的MySQL

幾件事情的問題:

始終確保您charset設置爲utf8在HTML meta標籤

default_charset = "utf-8"; 

在php.ini文件

並添加

AddDefaultCharset UTF-8 

到你的httpd.conf,如果你輸出的unicode字符

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');