У меня есть несколько файлов csv, загружаемых в MySQl с помощью Java. В поле «Описание» у меня есть несколько специальных символов, которые вызывают потерю нагрузки. Я использую LOAD DATA INFILE, как показано в блоке кода ниже. Это вложен в a для каждого цикла, который анализирует массив имен файлов/таблиц и проходит через каждую комбинацию до тех пор, пока она не будет закончена со всеми файлами.Как вставить специальные символы в MySQL с помощью Java
Вот мой JDBC Строка соединения, где я прохожу окончательную сверку параметр/значение для UTF8 сортировки
static String url = "jdbc:mysql://localhost:3306/iber_stage?verifyServerCertificate=false&characterEncoding=UTF8";
других параметры соединения и разбор массив имен файлов/tablenames
final String sql1 = ("TRUNCATE TABLE" + tableName);
final String sql2 = ("LOAD DATA INFILE" + filetoEat + "INTO TABLE staging." +tableName + "CHARACTER SET UTF8 FIELDS TERMINATED BY',' ENCLOSED BY '\"\' LINES TERMINATED BY '\n' IGNORE 1 LINES");
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(url, username, password);
st = con.createStatement();
st.executeUpdate(sql1);
rs = st.executeQuery(sql2);
if (rs.toString() != null) {
returnMsg = rs.toString();
System.out.println(returnMsg);
updFlag = 0;
String strRecs = returnMsg.substring(40);
updateControlTable(updFlag, strRecs);
}
} catch (SQLException ex) {
Logger lgr = Logger.getLogger(update.class.getName());
lgr.log(Level.SEVERE, ex.getMessage(), ex);
updFlag = 1;
} catch (ClassNotFoundException e) {
Logger lgr = Logger.getLogger(update.class.getName());
lgr.log(Level.SEVERE, e.getMessage(), e);
e.printStackTrace();
updFlag = 1;
}
Код, работает нормально, пока не натолкнется на специальный символ, такой как символ степени или микросимвол μ в описании материала. В этот момент он выбрасывает исключение
Invalid utf8 character string: 'LUG'
После строки LUG следует символ μ. БД установлена в utf8 - utf8_unicode_ci
, и рассматриваемая колонка представляет собой VARCHAR (60), который содержит описания материалов. Я пробовал использовать ESCAPED BY '\\'
, но я не могу заставить его работать правильно. Я также пробовал CHARACTER SET UTF8
. Я также пробовал различную сортировку, то есть utf8_general_ci
безрезультатно.
Любое понимание очень ценится
Да, я попробовал пару дней назад, и он по-прежнему бросает то же Исключение. Я редактировал свой пост, чтобы подумать, что я попытался установить кодировку. Я в значительной степени пробовал все, что мог, основываясь на документах MySQL для LOAD DATA INFILE за последние пару дней, но благодаря усилиям – apesa