2013-06-26 169 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');