我在mysql DB中有一个表,它包含了一些特殊字符,如:Å、Æ等。当我用php运行搜索时,我找不到这些字段。但是当我在phpmyadmin中运行相同的sql时,我会得到结果。这是表格结构:
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。需要一些帮助。
在进行查询之前,告诉您的连接实例要提供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');
尝试设置:
SET NAMES utf8;
在同一个mysql会话中查询之前
如果您可以访问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
尝试使用htmlspecialchars php函数。
string htmlspecialchars ( string $string , int $flags = ENT_COMPAT | ENT_HTML401
, string $encoding = 'UTF-8' , bool $double_encode = true)
您可以更改字符串的encoding
信息。例如,俄罗斯符号的KOI8-R
这可能是php.ini文件、Apache Web服务器或HTML文档或MySQL 的字符集的问题
要做的几件事:
始终确保在html元标签中将charset
设置为utf8
设置
default_charset = "utf-8";
在php.ini文件中
并添加
AddDefaultCharset UTF-8
如果您正在输出unicode字符