Hibernate/JPA import.sql utf8 characters corrupted

后端 未结 4 1886
感情败类
感情败类 2020-12-31 07:48

I\'m using import.sql to write my development data to DB. I\'m using MySQL Server 5.5 and my persistence.xml is here:



        
4条回答
  •  长发绾君心
    2020-12-31 07:54

    Here's a reliable solution without setting any system property.

    We assume that import files are encoded with UTF-8 but Java default charset is different, let's say latin1.

    1) Define a custom class for import_files_sql_extractor hibernate.hbm2ddl.import_files_sql_extractor=com.pragmasphere.hibernate.CustomSqlExtractor

    2) fix the invalid strings read by hibernate in the implementation.

    package com.pragmasphere.hibernate;
    
    import org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor;
    
    import java.io.IOError;
    import java.io.Reader;
    import java.io.UnsupportedEncodingException;
    import java.nio.charset.Charset;
    
    public class CustomSqlExtractor extends MultipleLinesSqlCommandExtractor {
    
        private final String SOURCE_CHARSET = "UTF-8";
    
        @Override
        public String[] extractCommands(final Reader reader) {
            String[] lines = super.extractCommands(reader);
    
            Charset charset = Charset.defaultCharset();
            if (!charset.equals(Charset.forName(SOURCE_CHARSET))) {
                for (int i = 0; i < lines.length; i++) {
                    try {
                        lines[i] = new String(lines[i].getBytes(), SOURCE_CHARSET);
                    } catch (UnsupportedEncodingException e) {
                        throw new IOError(e);
                    }
                }
            }
    
            return lines;
        }
    }
    

    You can change value of SOURCE_CHARSET with another encoding used by import files.

提交回复
热议问题