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'");