系统要求在MYSQL里存储繁体和简体文字
mysql5.0安装时候是GB2312
后来ALTER DATABASE szair DEFAULT CHARACTER SET utf8 COLLATE utf8_bin 
数据库都改成UTF8了,MY.INI也改成utf8了 default-character-set=utf8可是插入繁体到数据库报错,插不进去了
Incorrect string value: '\xE8\xBB\x9F\xE9\xAB\x94...' for column 'name' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3283)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1332)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1604)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1519)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1504)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:101)
at com.szair.db.BaseDAO.update(BaseDAO.java:34)
at com.szair.db.BaseDAO.update(BaseDAO.java:14)
at com.szair.db.BaseDAO.insert(BaseDAO.java:56)改变datasource也没用
 private static javax.sql.DataSource getJNDIDataSource2MySQL(String strJNDIName) throws Exception
    {
        Context ctx = new InitialContext();
        if (ctx == null)
            throw new Exception("iampro - No Context");
        System.out.println("~~~~~"+strJNDIName);
        DataSource datasource = (DataSource) ctx.lookup(strJNDIName);
        if (datasource instanceof BasicDataSource)
        {
            BasicDataSource bds = (BasicDataSource) datasource;
             bds.addConnectionProperty("useUnicode", "true");
             bds.addConnectionProperty("characterEncoding", "UTF-8");
        }
        return datasource;
    }

解决方案 »

  1.   

    jdbc:mysql://localhost/db?useUnicode=true;characterEncoding=UTF8
      

  2.   

    统一用UTF8是简单有效的办法了。
      

  3.   

    统一用utf8或者用latin1其实也可以.latin1的话就是原来是什么样进去还是什么样....
      

  4.   

    对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。我们最终的目标是使得这四个层次转化会支持中文的编码,下面以utf8为例。 
    1. 首先查看系统的字符集和排序方式。如果想查看某个特定的数据库的字符集和排序方式,应该先选定数据库,mysql>use databasename; 
    mysql> SHOW VARIABLES LIKE ''character_set_%''; 
    +--------------------------+----------------------------+ 
    | Variable_name | Value | 
    +--------------------------+----------------------------+ 
    | character_set_client | latin1 | 
    | character_set_connection | latin1 | 
    | character_set_database | latin1 | 
    | character_set_results | latin1 | 
    | character_set_server | latin1 | 
    | character_set_system | utf8 | 
    | character_sets_dir | /usr/share/mysql/charsets/ | 
    +--------------------------+----------------------------+ 
    7 rows in set (0.00 sec) 
    mysql> SHOW VARIABLES LIKE ''collation_%''; 
    +----------------------+-------------------+ 
    | Variable_name | Value | 
    +----------------------+-------------------+ 
    | collation_connection | latin1_swedish_ci | 
    | collation_database | latin1_swedish_ci | 
    | collation_server | latin1_swedish_ci | 
    +----------------------+-------------------+ 
    3 rows in set (0.00 sec) 
    上面列出的值就是系统的默认值,lanti是不支持中文的,所以我们把它改成urf8。 下面我们就来修改这四个层次的编码方式: 
    1 在my.cf文件的[mysqld]段设置: 
    default-character-set=utf8 
    这条语句的作用是把character_set_client, character_set_connection_,character_set_results 设定为utf8,包括对应的排列方式的编码。 
    Character_set_server是系统编码,这个是不用改的。 当然改变character_set_client, character_set_connection_,character_set_results编码方式的另外一种方法是:SET NAMES “UTF8”; 
    它的作用相当于: 
    SET character_set_client = utf8; 
    SET character_set_results = utf8; 
    SET character_set_connection = utf8; 
    2. 改变数据库的编码方式 
    alter database databasename character set utf8; 通过以上的更改数据库的编码工作算是昨晚了,当然除了这个方法还有一个万能个的方法,那就是看着那个不是utf8,你只要把相应的编码改成utf8就可以了。格式如下:SET character_set_client = utf8; 3. 不管你是web编程还是桌面编程,你的数据库的连接地址url中,一定要后缀:?useUnicode=true&characterEncoding=utf-8/hibernate?useUnicode=true&characterEncoding=utf-8 
    当然如果你采用了mysql的管理工具如mysql yog,mysql manager那么你数据库设定也可以在可视化环境下直接设置。当然这也只是限制在database的设定。 这个希望对楼住有用!
      

  5.   

    if (datasource instanceof BasicDataSource)
            {
                BasicDataSource bds = (BasicDataSource) datasource;
                 bds.addConnectionProperty("useUnicode", "true");
                 bds.addConnectionProperty("characterEncoding", "UTF8");
            }改了还是报错
      

  6.   

    重装一遍MYSQL选择UTF8就解决了。。mysql5.0安装时候是GB2312 
    后来ALTER DATABASE xxxx DEFAULT CHARACTER SET utf8 COLLATE utf8_bin 
    数据库都改成UTF8了,MY.INI也改成utf8了 default-character-set=utf8 这个好像不太对吧,改了也没用
      

  7.   

    那表和字段的字符集是什么?UTF8吗?