mysql 插入数据时中文变\x87\xE7\xA7\x91\xE7\x82这种?
以下测试 参数都在服务端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
------解决方案--------------------$db->Execute("SET NAMES UTF-8"); ???
这就是问题所在!
$db->Execute("SET NAMES UTF8");
mysql 中表示 utf-8 字符集的名字是 utf8 那不是 utf-8
这一特殊情况源于最初的程序员的手误,但已经无法再纠正过来了
------解决方案--------------------对客户端传递到服务端的表单数据实行:urlencode() 编码 URL 字符串