package org.mariadb.jdbc;
import org.junit.BeforeClass;
import org.junit.Test;
import java.sql.*;
import static org.junit.Assert.assertEquals;
public class UnicodeTest extends BaseTest {
/**
* Initialisation.
*
* @throws SQLException exception
*/
@BeforeClass()
public static void initClass() throws SQLException {
createTable("unicode_test", "id int not null primary key auto_increment, test_text varchar(100)",
"charset utf8");
createTable("umlaut_test", "id varchar(100), test_text varchar(100), t int", "charset utf8");
createTable("unicode_test2", "id int not null primary key auto_increment, test_text varchar(100)",
"charset=utf8");
createTable("unicode_test3", "id int not null primary key auto_increment, test_text varchar(100)",
"charset utf8mb4");
}
@Test
public void firstTest() throws SQLException {
String jaString = "\u65e5\u672c\u8a9e\u6587\u5b57\u5217"; // hmm wonder what this means...
Statement stmt = sharedConnection.createStatement();
PreparedStatement ps = sharedConnection.prepareStatement("insert into unicode_test (test_text) values (?)");
ps.setString(1, jaString);
ps.executeUpdate();
ResultSet rs = stmt.executeQuery("select test_text from unicode_test");
assertEquals(true, rs.next());
assertEquals(jaString, rs.getString(1));
}
@Test
public void testGermanUmlauts() throws SQLException {
String query = "insert into umlaut_test values('tax-1273608028038--5546415852995205209-13', "
+ "'MwSt. 7% Bücher & Lebensmittel', 7)";
Statement stmt = sharedConnection.createStatement();
stmt.executeUpdate(query);
ResultSet rs = stmt.executeQuery("select * from umlaut_test");
assertEquals(true, rs.next());
assertEquals("MwSt. 7% Bücher & Lebensmittel", rs.getString(2));
assertEquals(false, rs.next());
}
@Test
public void mysqlTest() throws SQLException {
String jaString = "\u65e5\u672c\u8a9e\u6587\u5b57\u5217"; // hmm wonder what this means...
Statement stmt = sharedConnection.createStatement();
PreparedStatement ps = sharedConnection.prepareStatement("insert into unicode_test2 (test_text) values (?)");
ps.setString(1, jaString);
ps.executeUpdate();
ResultSet rs = stmt.executeQuery("select test_text from unicode_test2");
assertEquals(true, rs.next());
assertEquals(jaString, rs.getString(1));
}
@Test
public void unicodeTests() throws SQLException {
String unicodeString = "";
unicodeString += "\uD83D\uDE0E"; // 😎 unicode 6 smiling face with sunglasses
unicodeString += "\uD83C\uDF36"; // 🌶 unicode 7 hot pepper
unicodeString += "\uD83C\uDFA4"; // 🎤 unicode 8 no microphones
unicodeString += "\uD83E\uDD42"; // 🥂 unicode 9 clinking glasses
//test binary protocol
try (Connection connection = setConnection("")) {
connection.createStatement().execute("SET NAMES utf8mb4");
checkSendAndRetrieve(connection, unicodeString);
}
//test prepare text protocol
try (Connection connection = setConnection("&rewriteBatchedStatements=true")) {
connection.createStatement().execute("SET NAMES utf8mb4");
checkSendAndRetrieve(connection, unicodeString);
}
}
private void checkSendAndRetrieve(Connection connection, String unicodeString) throws SQLException {
Statement stmt = connection.createStatement();
PreparedStatement ps = connection.prepareStatement("insert into unicode_test3 (test_text) values (?)");
ps.setString(1, unicodeString);
ps.executeUpdate();
ResultSet rs = stmt.executeQuery("select test_text from unicode_test3");
assertEquals(true, rs.next());
String returnString = rs.getString(1);
assertEquals(unicodeString, returnString);
}
}