特殊字符存储为?在我的mysql数据库中

时间:2012-11-24 15:25:49

标签: php mysql

我使用以下代码在我的数据库中存储和更新数据。

<?php
header("Content-Type: text/html;charset=UTF-8", true);
mysql_connect("localhost", "test", "test") or die(mysql_error());
    mysql_select_db("test") or die(mysql_error());

    // mysql_set_charset('UTF8');
    mysql_query("SET NAMES 'utf8'");
    mysql_query("SET CHARACTER SET utf8");
    mysql_query("SET COLLATION_CONNECTION = 'utf8_unicode_ci'");




    mysql_query("UPDATE `test`.`english` SET age = '".$age."', city = '".mysql_real_escape_string($_REQUEST['city'])."', aboutMe = '".$_REQUEST['about']."' WHERE `english`.`username` = '".$_REQUEST['username']."' LIMIT 1 ;") 
    or die(mysql_error());  

代码运行良好。但是如果是字符串,例如“city”包含ä,ö,ü它存储为? 因此,例如“Bär”这个词会转到“B?r”。

我已经添加了这些utf8的东西,但它没有帮助。 服务器只支持php4.x

编辑:数据库使用latin1_general_ci作为整理。

4 个答案:

答案 0 :(得分:0)

使用utf8作为整理,可能是utf8_binutf8_unicode_ci

(ci意味着它不区分大小写,所以像“John”=“JOHN”这样的比较返回true)。您可以通过在MySQL中运行以下查询来执行此操作:

alter table `test`.`english` convert to character set utf8 collate utf8_unicode_ci;

答案 1 :(得分:0)

将表格排名更改为utf8_bin

更改表的默认字符集和排序规则,包括现有列的表(注意convert to子句):

ALTER TABLE tableName CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin
utf8_general_ci

中的

ä = a
ö = o
ü = u

但在utf8_bin

ä != a
ö != o
ü != u

答案 2 :(得分:0)

保留ut8_unicode_ci并将其添加到您的php代码中:

mb_language('uni');
mb_internal_encoding('UTF-8');
mysql_query("set names 'utf8'",$connection); 

我到处使用它(西里尔文,中文等),它适用于每个查询(插入或更新)。

 <?php
        header("Content-Type: text/html;charset=UTF-8", true);
        $connection = mysql_connect("localhost", "test", "test") or die(mysql_error());

        mb_language('uni');
        mb_internal_encoding('UTF-8');
        mysql_query("set names 'utf8'",$connection);

        mysql_select_db("test") or die(mysql_error());
        mysql_query("UPDATE `test`.`english` SET age = '".$age."', city = '".mysql_real_escape_string($_REQUEST['city'])."', aboutMe = '".$_REQUEST['about']."' WHERE `english`.`username` = '".$_REQUEST['username']."' LIMIT 1 ;") 
        or die(mysql_error());  

答案 3 :(得分:0)

我得到了它的工作。我没有解释这种行为。 我已将php文件从utf8更改为latin1:

mysql_query("SET NAMES 'latin1'");
mysql_query("SET CHARACTER SET latin1");
mysql_query("SET COLLATION_CONNECTION = 'latin1_general_ci'");

在MySQL数据库中,表和列的排序规则为utf8_unicode_ci。

现在可以使用€符号旁边的所有字符。