不能用语句来改。请大家测试一下自己装的mysql5。INSERT INTO test VALUES ('運\'); 这个写法是肯定没错的。从mysqldump倒出来的数据也是这样写。如果要改语句那适用性和工作量都太恐怖了。
请装一个mysql41以上的版本。只要能写入 INSERT INTO test VALUES ('運\'); 而不乱码。我用样的版本步骤通过的话,200分立即送上。
我刚刚试过了,没有出现你说的情况 环境,win32,php5,mysql5.0x
输入的变量我没有用addslashes来处理,在输出sql语句的时候发现被自动处理了,下面是sql语句: insert into tuser(xxx,yyy) values('運\運\','運\運\') insert into tuser(xxx,yyy) values('運\','運\')读取值的时候也没有做任何处理,数据库中,网页显示的都是正常的。
我是这样测的[test.sql] insert into tuser (xxx,yyy) values('運\','運\'); mysql>use database; mysql>\. test.sql应该不关php的事吧?
I tried "insert into tuser(xxx,yyy) values('運\','運\')" and failed.
Sorry, I tried "INSERT INTO test VALUES ('運\');" in phpmyadmin, and succeeded. It insert "運" into db.But when I use php to insert:"$sql = "insert into test values ('運\')";", It failed.So I think it is about the problem of charset.
$sql="insert into test values ('運\')";当然是failed啦。 因为php中本身就要转义一次。这样写可以就可以了。 $sql="insert into test values ('運\\\')";你的mysql版本?如果是4.1以上版本可以提供一下下载地址吗?我在本机已经装过近十个版本了都没有一个能够通过。phpmyadmin里INSERT INTO test VALUES ('運\');全部报错。试了三台机器都一样,我都不知道怎么回事了。
我没用过phpmyadmin,我用pb作为数据库开发工具,pb通过myodbc连接的。我执行sql语句是insert into tuser(xxx,yyy) values('運\','運\') 没有出问题。你的开发环境到底是什么啊?如果是win32,不妨通过myodbc试一下。
I use mysql 5.0.22-community-nt mysql info from phpmyadmin:character set client utf8 latin1 character set connection utf8 latin1 character set database latin1 latin1 character set filesystem binary binary character set results utf8 latin1 character set server latin1 latin1 character set system utf8 utf8
这不是mysql版本的问题,是字符集的问题 character_set_system=utf8 character_set_results=latin1 character_set_connection=latin1 collation_connection=latin1_swedish_ci 默认连接客户端使用的是latin1字符集,这个时候SQL语句应写成 INSERT INTO test VALUES ('運\');如果客户端使用的是gbk编码,那么sql语句和上面的相同,因为gbk兼容latin的字符集如果使用的是utf8编码,那么不需要加\, INSERT INTO test VALUES ('運');即可,utf8中"運"的编码是e9 81 8b不包括"\"的这个字符的码位,此外你的数据库及表对应的编码也会有影响,要注意统一
快说到点子上了。我现在的问题是set names gbk;后情况同utf8!! 用其他语言时是 INSERT INTO test VALUES ('運\');可是set为gbk或utf8时却都是 INSERT INTO test VALUES ('運');我就是为了解决这个问题。请帮助。
set names gbk; 后,character_set_system=utf8,其他都是gbk了。但是写入时就是不能加\,以至于我无法将原数据导出的gbk sql导入。
稻草人的解释是对的,不过有一个小错误。 如果客户端使用的是gbk编码,那么sql语句为 INSERT INTO test VALUES ('運');你必须修改数据库的配置,设置字符集为gbk以下是我的mysql的配置,本地环境,winxp+mysql5.0.22 mysql> \s -------------- mysql Ver 14.12 Distrib 5.0.22, for Win32 (ia32)Connection id: 6 Current database: co Current user: root@localhost SSL: Not in use Using delimiter: ; Server version: 5.0.22-community-nt Protocol version: 10 Connection: localhost via TCP/IP Server characterset: gbk Db characterset: gbk Client characterset: gbk Conn. characterset: gbk TCP port: 3306 Uptime: 28 min 20 secThreads: 1 Questions: 65 Slow queries: 0 Opens: 2 Flush tables: 1 Open tabl es: 7 Queries per second avg: 0.038 -------------- 我的my.ini------------------------------ [mysql]default-character-set=gbk[mysqld]default-character-set=gbk
set names gbk后,当然就不能+\了,因为mysql已经当運是一个字符了。 如果 set names latin1 ,那么mysql将汉字拆开成为一个一个的ascii字符,所以要+\
我现在需要的是在程序代码用gbk来做页面,要可以正确执行以下代码。$db->query("insert into test values ('".addslashes('運\')."')");总不能在防注入时还要判断里面是不是带有特殊字符,如果有,还要分割处理单独吧?有些人的mysql是可以这样写入的。我希望让我的mysql也这样,该如何设置mysql。我现在只能这样加这个字,这样没办法防sql注入了。 $db->query("insert into test values ('運\')");
在mysql40里报错,在mysql5里写入的是運\
INSERT INTO test VALUES ('運\');
所以在写入mysql时会被替换成'運/',这是正确的。
如果直接写'運'的话在mysql40里会报错。
INSERT INTO test VALUES ('運\');
而不乱码。我用样的版本步骤通过的话,200分立即送上。
环境,win32,php5,mysql5.0x
insert into tuser(xxx,yyy) values('運\運\','運\運\')
insert into tuser(xxx,yyy) values('運\','運\')读取值的时候也没有做任何处理,数据库中,网页显示的都是正常的。
下载地址:http://dev.mysql.com/downloads/connector/php/
把odbc也更新一下吧:http://dev.mysql.com/downloads/connector/odbc/3.51.html
insert into tuser (xxx,yyy) values('運\','運\');
mysql>use database;
mysql>\. test.sql应该不关php的事吧?
It insert "運" into db.But when I use php to insert:"$sql = "insert into test values ('運\')";",
It failed.So I think it is about the problem of charset.
因为php中本身就要转义一次。这样写可以就可以了。
$sql="insert into test values ('運\\\')";你的mysql版本?如果是4.1以上版本可以提供一下下载地址吗?我在本机已经装过近十个版本了都没有一个能够通过。phpmyadmin里INSERT INTO test VALUES ('運\');全部报错。试了三台机器都一样,我都不知道怎么回事了。
没有出问题。你的开发环境到底是什么啊?如果是win32,不妨通过myodbc试一下。
但我查了一下环境变量发现还是有好几个变量如下,不知道是不是这个原因?
character_set_system=utf8
character_set_results=latin1
character_set_connection=latin1
collation_connection=latin1_swedish_ci
我默认安装
用mysqlfront的最新版本插入记录
用mysqlfront或者dos下查询记录,中文全乱码
用delphi编写数据库程序,显示的结果又正确的如果安装的时候选择gb2312
用mysqlfront的最新版本插入记录
用mysqlfront或者dos下查询记录,中文正确
用delphi编写数据库程序,显示的是乱码真不知道如何解决这个问题啊
character set connection utf8 latin1
character set database latin1 latin1
character set filesystem binary binary
character set results utf8 latin1
character set server latin1 latin1
character set system utf8 utf8
character_set_system=utf8
character_set_results=latin1
character_set_connection=latin1
collation_connection=latin1_swedish_ci
默认连接客户端使用的是latin1字符集,这个时候SQL语句应写成
INSERT INTO test VALUES ('運\');如果客户端使用的是gbk编码,那么sql语句和上面的相同,因为gbk兼容latin的字符集如果使用的是utf8编码,那么不需要加\,
INSERT INTO test VALUES ('運');即可,utf8中"運"的编码是e9 81 8b不包括"\"的这个字符的码位,此外你的数据库及表对应的编码也会有影响,要注意统一
用其他语言时是
INSERT INTO test VALUES ('運\');可是set为gbk或utf8时却都是
INSERT INTO test VALUES ('運');我就是为了解决这个问题。请帮助。
后,character_set_system=utf8,其他都是gbk了。但是写入时就是不能加\,以至于我无法将原数据导出的gbk sql导入。
如果客户端使用的是gbk编码,那么sql语句为
INSERT INTO test VALUES ('運');你必须修改数据库的配置,设置字符集为gbk以下是我的mysql的配置,本地环境,winxp+mysql5.0.22
mysql> \s
--------------
mysql Ver 14.12 Distrib 5.0.22, for Win32 (ia32)Connection id: 6
Current database: co
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server version: 5.0.22-community-nt
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: gbk
Db characterset: gbk
Client characterset: gbk
Conn. characterset: gbk
TCP port: 3306
Uptime: 28 min 20 secThreads: 1 Questions: 65 Slow queries: 0 Opens: 2 Flush tables: 1 Open tabl
es: 7 Queries per second avg: 0.038
--------------
我的my.ini------------------------------
[mysql]default-character-set=gbk[mysqld]default-character-set=gbk
如果 set names latin1 ,那么mysql将汉字拆开成为一个一个的ascii字符,所以要+\
$db->query("insert into test values ('運\')");
说明这个字的编码太奇怪,应该找出编码这个字的人,鞭他一顿
php解析的时候显然当成 "x\" 了
它存在隐式转义,php的转义字符默认就是\,如果能把它改成别的就能搞定,不过这不大可能
这样mysql就把字符分割为ascii来处理,就ok了。
繁体存成big5或者统一成utf-8就ok了
到如到处用别的工具,mysql-front之类的,别用pma或者跟php有关的工具
虽然是繁简体混用,但都是gbk编码的范围内。用utf8是无法解决的。如果是从mysql40里导出的gbk数据是无法导入到utf8数据库里的,带有大量的\号啊。
这个我倒没验证,个人看法,读出来的时候set names gbk,应该就ok了。
写入为gb2312时读出'哕'