MySQL数据库编码

时间:2013-12-23 11:00:12

标签: java mysql encoding

开始之前,抱歉我的英语。

我遇到了MySQL的问题。我创建数据库,并将编码字符串更改为latin2。来自Java的查询:

`INSERT INTO infos VALUES ( NULL, '100001486491198', 'ęłóżźćść!@#', '2013-12-23 11:24:37', 0, 0, 0 );`

在数据库中,所有看起来都像“???????”。我在phpMyAdmin中将此字符串更改为targen,当我执行SELECT查询时,我会在响应中获取相应的字符串。

此外,我将此代码添加到数据库连接:

      Properties properties = new Properties();
      properties.put( "user", DBUSER );
      properties.put( "password", DBPASS );
      properties.put( "characterEncoding", "ISO-8859-2" );
      properties.put( "useUnicode", "true" );

    try {
        Class.forName( DBDRIVER ).newInstance();
        connection  = DriverManager.getConnection( DBURL, properties ); 
        statement   = connection.createStatement();
    } 
    catch (InstantiationException | IllegalAccessException | ClassNotFoundException | SQLException e ) {
        e.printStackTrace();
    } 

但作为回应我收到错误:

java.sql.SQLException: Incorrect string value: '\xB3\xF3\xBF\xBC\xE6\xBF...' for column 'content' at row 1
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4190)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4122)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2812)
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1811)
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1725)
    at com.mpkinfo.server.database.Database.add(Database.java:48)
    ...

我做错了什么?

2 个答案:

答案 0 :(得分:0)

如果使用unicode字符,请将所有表格和文件编码设置为utf-8。

答案 1 :(得分:0)

我建议您使用UTF8,但如果您坚持使用ISO-8859-2,则必须将DBURL更改为:

jdbc:mysql://localhost:3306/yourDatabase?useUnicode=falsee&characterEncoding=ISO-8859-2