У меня есть таблица базы данных MySql 5.7.20 с именем deliveries
со столбцом с именем message
, который имеет тип blob.
Я хочу, чтобы это поддерживало специальные символы, такие как смайлики.Я могу вставить и просмотреть строку с эмодзи:
Я знаю, хочу прочитать это с Java.Мой код:
public class JavaMysqlSelectExample
{
public static void main(String[] args)
{
try
{
// create our mysql database connection
String myDriver = "com.mysql.jdbc.Driver";
String myUrl = "jdbc:mysql://localhost/products?useUnicode=true&characterEncoding=UTF-8";
Class.forName(myDriver);
Connection conn = DriverManager.getConnection(myUrl, "mark", "hht6yyt6yyt6");
// our SQL SELECT query.
// if you only need a few columns, specify them by name instead of using "*"
String query = "SELECT SUBSTRING(message,1,2500) as message FROM deliveries where id = 9";
// create the java statement
Statement st = conn.createStatement();
// execute the query, and get a java resultset
ResultSet rs = st.executeQuery(query);
// iterate through the java resultset
while (rs.next())
{
String message = rs.getString("message");
// print the results
System.out.format("%s", message);
}
st.close();
}
catch (Exception e)
{
System.err.println("Got an exception! ");
System.err.println(e.getMessage());
}
}
}
Мой файл POM:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>datbase</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.jdbi/jdbi -->
<dependency>
<groupId>org.jdbi</groupId>
<artifactId>jdbi</artifactId>
<version>2.78</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
</dependencies>
</project>
Но когда я запускаю его, я вижу:
Emoji каким-то образом поврежден JDBC.Что я могу попробовать?
РЕДАКТИРОВАТЬ
Мне удалось прочитать смайлики с помощью метода:
private String convertToUTF8(String str) {
if (str == null) {
return "";
}
try {
byte[] ptext = str.getBytes("ISO-8859-1");
return new String(ptext, "UTF-8");
} catch (UnsupportedEncodingException e) {
log.error("problem converting delivery.message to UTF-8: " + e.toString());
}
return "";
}
Теперь я могуувидеть смайликов в консоли.Теперь есть еще одна проблема: это работает с моей локальной базой данных mysql, но не с той, что на AWS.Я выполнил несколько запросов:
show variables like 'collation%';
На локальном БД он вернул:
На экземпляре на AWS он вернул:
Таким образом, разница составляет collation_server
.И я не могу понять, как это изменить.Я попытался запустить:
ALTER DATABASE products CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Но значение collation_server
по-прежнему utf8mb4_unicode_ci
.....