public void add(Connection conn, Login lg) {
String sql="insert into t_user values(null,?,?,?,?,now())";
PreparedStatement stat=null;
try {
stat=conn.prepareStatement(sql);
stat.setString(1, lg.getUsername());
stat.setString(2, lg.getPassword());
stat.setString(3, lg.getXb());
stat.setString(4, lg.getEmail());
stat.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
DB.CloseStatement(stat);
}
}这个方法,发到数据库里的中文全都变?? 但我在mysql里直接用insert语句能添加进中文。这是什么问题啊??

解决方案 »

  1.   

    吾等亦认为是排序规则的问题,你可以看看表的排序规则是不是Chinese_PRC_CI_AS。
    字段前加N应该可以解决问题
      

  2.   

    如果你的字段类型是nvarchar,
    那么插入相应中文字段的时候 
    values(N'你是帅哥')--注意这里加个N 必须是大写
      

  3.   

    参考:
    在SQL 2005中用T-SQL插入中文数据时出现的问号或乱码的解决方案!!!! 病症表现为:主要表现为用T-sql语句插入中文数据时数据库显示全是问号“???” 
    解决办法:第一种办法:先选中出错的数据库→选中以后右键点击属性会弹出数据库属性 对话框→选中数据库属性对话框中的选项→把选项中的排序规则设置成:Chinese_PRC_90_CI_AS→最后点击确定即可。
    (注意:在选择数据库属性的时候必须确保你所修改的数据库未被使用才可以修改否则会失败的)第二种办法:首先打开你的sql查询分析器(新建查询),然后输入以下代码执行即 可:ALTER DATABASE 数据库名 COLLATE Chinese_PRC_90_CI_AS
    例如: 
    ALTER DATABASE 9NPC COLLATE Chinese_PRC_CI_AIALTER DATABASE AutoUpgrade COLLATE Chinese_PRC_CI_AI解析原因:出现以上情况主要是因为数据库属性的排序规则设置不正确,在Microsoft SQL Server 2005 中,字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存储和比较字符所使用的规则。
    排序规则名称由两部份构成,前半部份是指本排序规则所支持的字符集。
    如:
      Chinese_PRC_90_CI_AS
    前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则。
    排序规则的后半部份即后缀 含义: 
      _BIN 二进制排序 
      _CI(CS) 是否区分大小写,CI不区分,CS区分
      _AI(AS) 是否区分重音,AI不区分,AS区分   
      _KI(KS) 是否区分假名类型&defKI不区分,KS区分 
    _WI(WS) 是否区分宽度 WI不区分,WS区分 区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。
    区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项,比较还将重音不同的字母视为不等。
    区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。
    区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项(完)。******************************************************************************************