首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UTF-8在数据库内部工作,但不能与数据库中的字符串一起工作

问UTF-8在数据库内部工作,但不能与数据库中的字符串一起工作
EN

Stack Overflow用户
提问于 2012-08-07 20:48:26
回答 3查看 173关注 0票数 0

我对utf-8编码非常陌生,从那时起就一直使用htmlentities(),但现在我想在数据库中更改为utf-8。我想这可能会派上用场,因为我正在编程的网站是德语的,我使用了很多元音。

然而,我突然意识到我有一个无法解释的问题。在html头中,我说

代码语言:javascript
复制
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

为了进行测试,如果我输入一个普通的"ö“并将其硬编码为html,它可以很好地显示。

现在奇怪的事情来了:在我的数据库中,我有一个条目"Köln“-在数据库中它看起来完全像这样。但是,当我使用php从表中获取字符串并回显它时,它被回显为"K�ln“。

另一方面,如果我键入元音并使用ajax将其发送到表中,"Köln“-我键入的字符串-在数据库中就变成了”K and“。

为此,我使用以下代码:

代码语言:javascript
复制
//Change city
$('#newcitybutton').click(function(){
//Get id and city
var id=encodeURIComponent($('#id').html()); //This does not seem to be the problem - if I leave that out, I still does the same thing
var city=$('#newcity').val();

//Call script to change city
$.ajax({
    type: 'POST',
    url: 'action/changecity.php',
    data: 'id='+id+'&city='+city+'&kind='+kind,
    success: function(feedback){
        var json=$.parseJSON(feedback);
        if(json.success=='false'){
            $('#newcityfeedback').css('color','red').html(json.message).hide().fadeIn(200);
        }else if(json.success=='true'){
            $('#newcity').hide();
            $('#newcitybutton').hide();
            $('#'+kind+'city').html(decodeURIComponent(city));
            $('#newcityfeedback').css('color','green').html(json.message).hide().fadeIn(200).delay(2000).fadeOut(200);
        }
    }
});
});

Changecity.php:

代码语言:javascript
复制
//Save in vars
$id=$_POST['id'];
$city=$_POST['city'];
$kind=$_POST['kind'];

//Update city
$query="UPDATE ".$kind."s SET city='$city' WHERE id=$id";
mysql_query($query);

我认为,当我在将数据放入数据库之前使用$city=utf8_decode($city);时,它会正确地保存在数据库中。但是,我需要使用utf8_encode在页面上正确地显示它。

我在这里做错了什么?我只是不能确定错误是来自于我的代码,还是数据库。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-07 20:52:52

尝试使用参数为"UTF8“的PHP函数mysql_set_charset()。

http://php.net/manual/en/function.mysql-set-charset.php

票数 2
EN

Stack Overflow用户

发布于 2012-08-07 20:53:16

您还需要为当前连接设置MySQL使用的编码。

使用 PDO ,将以下选项传递给PDO类构造函数:

代码语言:javascript
复制
$pdoOptions = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
);

使用不推荐使用的MySQL扩展,在创建连接后立即执行以下查询:

代码语言:javascript
复制
mysql_query("SET NAMES utf8"); 

有关更多信息,请查看此堆栈溢出问题:SET NAMES utf8 in MySQL?

票数 1
EN

Stack Overflow用户

发布于 2012-08-07 20:50:50

您可以在数据库连接后设置名称编码-请遵循本教程:http://www.oreillynet.com/onlamp/blog/2006/01/turning_mysql_data_in_latin1_t.html/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11846397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档