Maison  >  Article  >  développement back-end  >  mysql 插入数据时中文变x87xE7xA7x91xE7x82这种?

mysql 插入数据时中文变x87xE7xA7x91xE7x82这种?

WBOY
WBOYoriginal
2016-06-23 14:24:561168parcourir

mysql;

以下测试 参数都在服务端php文件定义,客户端并不传输;
$sqlstr 数据由adodb读mssql数据库,读出的中文转码:iconv("GBK","UTF-8",$str)

如果直接运行服务器端php文件,直接运行mysql inert 不会出问题

但是如果由客户端post到php,运行mysql 就报错:

Incorrect string value: '\x87\xE7\xA7\x91\xE7\x82...' for column 'typename' at row 1

如果echo $sqlstr 
输出:INSERT INTO dede_arctype SET id ='2001', reid ='1002', topid ='1002', sortrank ='50', typename ='妇科炎症', typedir ='{cmspath}/a' 没问题

直接在mysql-front运行:
  INSERT INTO dede_arctype SET id ='2001', reid ='1002', topid ='1002', sortrank ='50', typename ='妇科炎症', typedir ='{cmspath}/a' 也没问题

这是为什么???

回复讨论(解决方案)

但是如果由客户端post到php,运行mysql 就报错:

Incorrect string value: '\x87\xE7\xA7\x91\xE7\x82...' for column 'typename' at row 1


将你post过来的数据转换一下编码

$typename = iconv("UTF-8", "UTF-8", $typename);


你试试从utf-8转为utf-8

不转码
echo base64_encode($str);
贴出结果

不转码
echo base64_encode($str);
贴出结果

SU5TRVJUIElOVE8gZGVkZV9hcmN0eXBlIFNFVCAgaWQgICAgICAgID0nMTAwMicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWlkICAgICAgID0nMCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BpZCAgICAgID0nMCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0cmFuayAgID0nMCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSAgID0n5oGS55Sf5aaH56eRJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVkaXIgICAgPSd7Y21zcGF0aH0vYWhzZmsnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNkZWZhdWx0ICA9JzEnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGluZGV4ICA9J3tzdHlsZX0vaW5kZXhfYXJ0aWNsZS5odG0nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxpc3QgICA9J3tzdHlsZX0vbGlzdF9hcnRpY2xlLmh0bScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wYXJ0aWNsZT0ne3N0eWxlfS9hcnRpY2xlX2FydGljbGUuaHRtJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVydWxlICAgPSd7dHlwZWRpcn0ve1l9e019e0R9L3thaWR9Lmh0bWwnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXJ1bGUyICA9J3t0eXBlZGlyfS9saXN0X3t0aWR9X3twYWdlfS5odG1sJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSfmgZLnlJ/ljLvpmaLlpofnp5Hmi6XmnInkuIDmlK/nlLHlpJrlkI3otYTmt7HkuJPlrrbjgIHkuLvmsrvljLvluIjjgIHkuLvnrqHmiqTluIjnu4TmiJDnmoQuLi4nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZHMgICA9J+a3seWcs+Wmh+enkSzkurrmtYEs55eb57uPLOeUn+auluWZqCzlrqvpoojnlr7nl4Us5aWz5oCnLOeCjueXhyzogr/nmKQs5pu0Li4uJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlb3RpdGxlICAgPSfmgZLnlJ/lpofnp5En

INSERT INTO dede_arctype SET  id        ='1002',                                 reid       ='0',                                 topid      ='0',                                 sortrank   ='0',                                 typename   ='恒生妇科',                                 typedir    ='{cmspath}/ahsfk',                                 isdefault  ='1',                                 tempindex  ='{style}/index_article.htm',                                 templist   ='{style}/list_article.htm',                                 temparticle='{style}/article_article.htm',                                 namerule   ='{typedir}/{Y}{M}{D}/{aid}.html',                                 namerule2  ='{typedir}/list_{tid}_{page}.html',                                 description='恒生医院妇科拥有一支由多名资深专家、主治医师、主管护师组成的...',                                 keywords   ='深圳妇科,人流,痛经,生殖器,宫颈疾病,女性,炎症,肿瘤,更...',                                 seotitle   ='恒生妇科'
数据没有问题
你在插入前有 mysql_query('set names utf8'); 吗?

INSERT INTO dede_arctype SET  id        ='1002',                                 reid       ='0',                                 topid      ='0',                                 sortrank   ='0',                                 typename   ='恒生妇科',                                 typedir    ='{cmspath}/ahsfk',                                 isdefault  ='1',                                 tempindex  ='{style}/index_article.htm',                                 templist   ='{style}/list_article.htm',                                 temparticle='{style}/article_article.htm',                                 namerule   ='{typedir}/{Y}{M}{D}/{aid}.html',                                 namerule2  ='{typedir}/list_{tid}_{page}.html',                                 description='恒生医院妇科拥有一支由多名资深专家、主治医师、主管护师组成的...',                                 keywords   ='深圳妇科,人流,痛经,生殖器,宫颈疾病,女性,炎症,肿瘤,更...',                                 seotitle   ='恒生妇科'
数据没有问题
你在插入前有 mysql_query('set names utf8'); 吗?

$db->Execute("SET NAMES UTF-8");

INSERT INTO dede_arctype SET  id        ='1002',                                 reid       ='0',                                 topid      ='0',                                 sortrank   ='0',                                 typename   ='恒生妇科',                                 typedir    ='{cmspath}/ahsfk',                                 isdefault  ='1',                                 tempindex  ='{style}/index_article.htm',                                 templist   ='{style}/list_article.htm',                                 temparticle='{style}/article_article.htm',                                 namerule   ='{typedir}/{Y}{M}{D}/{aid}.html',                                 namerule2  ='{typedir}/list_{tid}_{page}.html',                                 description='恒生医院妇科拥有一支由多名资深专家、主治医师、主管护师组成的...',                                 keywords   ='深圳妇科,人流,痛经,生殖器,宫颈疾病,女性,炎症,肿瘤,更...',                                 seotitle   ='恒生妇科'
数据没有问题
你在插入前有 mysql_query('set names utf8'); 吗?

$db->Execute("SET NAMES UTF-8");

不转码
echo base64_encode($str);
贴出结果

大哥:插入数据库显示:å­?宫å?…è??ç??这样的乱码,
如果echo $typename;显示:\u4e0d\u80b2\u4e0d\u5b55'\u6210\u529f
这是为什么呢???

$db->Execute("SET NAMES UTF-8"); ???
这就是问题所在!
$db->Execute("SET NAMES UTF8");
mysql 中表示 utf-8 字符集的名字是 utf8 那不是 utf-8
这一特殊情况源于最初的程序员的手误,但已经无法再纠正过来了

对客户端传递到服务端的表单数据实行:urlencode() 编码 URL 字符串

对客户端传递到服务端的表单数据实行:urlencode() 编码 URL 字符串
客户端没有具体数据传递过来,传递的只是操作条件、

$db->Execute("SET NAMES UTF-8"); ???
这就是问题所在!
$db->Execute("SET NAMES UTF8");
mysql 中表示 utf-8 字符集的名字是 utf8 那不是 utf-8
这一特殊情况源于最初的程序员的手误,但已经无法再纠正过来了

非常感谢、好像真是这个问题!!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn