0

我在 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。需要一些帮助。

4

5 回答 5

3

在进行查询之前,告诉您的连接实例提供 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');
于 2013-06-26T15:10:00.293 回答
2

尝试设置:

SET NAMES utf8;

在同一个 mysql 会话中查询之前

于 2013-06-26T14:58:52.980 回答
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
于 2013-06-26T15:04:40.010 回答
-1

这可能是您的 php.ini 文件、Apache Web 服务器或 HTML 文档或 MySQL 的字符集的问题

几件事要:

始终确保您在 html 元标记charset中设置为utf8

default_charset = "utf-8";

在你的 php.ini 文件中

并添加

AddDefaultCharset UTF-8

如果您正在输出 unicode 字符,则到您的 httpd.conf

于 2013-06-26T15:01:48.687 回答
-1

尝试使用htmlspecialchars php 函数。

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

您可以更改encoding字符串的信息。例如KOI8-R俄罗斯符号

于 2013-06-26T15:01:16.373 回答