php网页编码是GB2312
mysql数据库编码同为GB2312现有如下情况
假设在编辑器内输入下面这段问题:
“江苏索普(集团)有限公司 (原镇江化工厂)始建于1958年,经过40多年的发展,逐步涉足生物化学、材料化学等相关领域,现已发展成为集科、工、贸、服务于一体,跨地区、跨行业的国家大型企业。1994年成立江苏索普集团公司,1996年,组建上市公司――江苏索普化工股份有限公司(代码:600746)在上海证券交易所成功上市,1997年公司被江苏省人民政府批准为国有资产投资主体,2004年,位列全国石化百强企业之列。 ”sql语句为:
$sql="insert into tab_1 value(NULL,'江苏索普(集团)有限公司 (原镇江化工厂)始建于1958年,经过40多年的发展,逐步涉足生物化学、材料化学等相关领域,现已发展成为集科、工、贸、服务于一体,跨地区、跨行业的国家大型企业。1994年成立江苏索普集团公司,1996年,组建上市公司――江苏索普化工股份有限公司(代码:600746)在上海证券交易所成功上市,1997年公司被江苏省人民政府批准为国有资产投资主体,2004年,位列全国石化百强企业之列。 ')"结果存储结果为“江苏索普(集团)有限公司 (原镇江化工厂)始建于1958年,经过40多年的发展,逐步涉足生物化学、材料化学等相关领域,现已发展成为集科、工、贸、服务于一体,跨地区、跨行业的国家大型企业。1994年成立江苏索普集团公司,1996年,组建上市公司――江苏索普化工股份有限公司(代码:600746)在上海证券交易所成功上市,1997年公司被江苏省人民政府批准为国有资产投资主体,2004年,位列全国石化百强企业之列。”
注意,红色部分为未写入部分,问题于是出现了!我查了部分资料:在SQL中,“——”会使SQL在执行过程中忽略掉“——”其后的所有内容,即产生了上述“红色部分”文字不能存储得现象。但是,如果讲整个编码改成UTF8,却能顺利执行!
问:
1、编码为GB2312的情况下,如何顺利存储这个带有“——”得文字字符串。
2、为什么UTF8可以顺利存储这个“——”?
3、是编码引起得问题还是别得原因?

解决方案 »

  1.   

    用‘\’转义一下或用mysql_real_escape_string
      

  2.   

    不会,因为我用了PHP得防注函数,引号,双引号,NUL,/都会被转义,单独就是这个“——”不会被转义!同样得一段文字内容,为什么可以在UTF8上可以执行,而到了GB2312就不行了。
    “selcet * from tab1 where id=1--'";
    上面得句子中,最后那个”——'"就会被忽略! 
      

  3.   

    为了说明问题, 下面有一段例子:

    SELECT * FROM product WHERE PCategory='food' or 1=1--'
    现在这个请求将会从product表中选取每一条信息而并不会去理会PCategory是否等于'food'。至于结尾
    部分的那两条'--'(破折号)则用于‘告诉’MS SQL SERVER忽略结尾最后的那个'(单引号)。有的时候也
    可以使用'#'(井号)来代替'--'(双破折号)在这里的用法。
      

  4.   

     如果是程序本身得问题,那么为什么编码为UTF8得时候却可以顺利存取,而编码为GB2312时却不正常?
    请高手解释!
      

  5.   

    没碰到这种问题,应该不是程序问题,可能是mysql对不同编码处理的方式不同导致的,等待高手解决,顺便学习下。