Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 特殊字符存储为?在我的mysql数据库中_Php_Mysql - Fatal编程技术网

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

Php 特殊字符存储为?在我的mysql数据库中,php,mysql,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_quer

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

<?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());  

使用utf8作为排序规则,可能是
utf8\u-bin
utf8\u-unicode\u-ci

(ci表示它不区分大小写,因此“John”=“John”等分隔返回true)。您可以通过在MySQL中运行以下查询来实现这一点:

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

将表格排序规则更改为
utf8\u bin

要更改表(包括现有列的表)的默认字符集和排序规则(请注意convert To子句),请执行以下操作:

utf8\u常规\u ci中

ä = a
ö = o
ü = u
但是在
utf8\u bin中

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

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

mb_language('uni');
mb_internal_encoding('UTF-8');
mysql_query("set names 'utf8'",$connection); 
我在任何地方都使用它(西里尔文、中文等),并且它适用于每个查询(插入或更新)


我让它工作了。我对这种行为没有任何解释。
我已将php文件中的utf8更改为latin1:

mysql_query("SET NAMES 'latin1'");
mysql_query("SET CHARACTER SET latin1");
mysql_query("SET COLLATION_CONNECTION = 'latin1_general_ci'");
在MySQL数据库中,表和列的排序规则是utf8\U unicode\U ci


它现在适用于欧元符号以外的所有字符。

utf8\u general\u ci是一种传统排序规则,不支持扩展、收缩或可忽略字符。它只能对角色进行一对一的比较。奇怪的是。我有另一个表,具有相同的排序规则latin1_general_ci,它与äüö一起工作,为什么?这将是我的建议,尤其是在比较时,如果大小写对您不重要的话。我将其更改为utf8_unicode_ci。现在,它忽略了特殊的字符作为。所以像Bär->BDo这样的词我必须对整个表进行更改,就像上面建议的查询中那样,或者只对行进行更改?这里的问题不是PHP版本,问题是MySQL如何存储这些值。请首先尝试此查询:
alter table
test
english`转换为字符集utf8 collate utf8\u unicode\u ci`我试过了,但是现在äüö被忽略了,后面的字符也被忽略了。所以一个词“Bücken”->“B”。我只在一行中添加了排序规则!确保这是您的数据库、表和列具有utf8\U general\U ci排序规则,并且您的页面也具有utf8。如何确保所有这些都具有utf8排序规则?在phpmyadmin中,您有db的操作选项卡和表。您将看到“排序规则”下拉列表。在表中,单击“更改”以获得某个列,您将看到“排序规则”下拉列表。您只需选择utf8\u general\u ci并单击save(操作中的Go按钮和表chnage中的save按钮)。
 <?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());  
mysql_query("SET NAMES 'latin1'");
mysql_query("SET CHARACTER SET latin1");
mysql_query("SET COLLATION_CONNECTION = 'latin1_general_ci'");