Dies ist mein derzeitiger Zeichensatz. Ich versuche, latin1 Zeichen einzufügen, und ich kann es nicht zum Funktionieren bringen.mysql jdbc-Treiber erkennt latin1-Zeichen nicht
SHOW VARIABLES LIKE 'char%';
+--------------------------+-----------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /space/xyz/mysql/share/charsets/ |
+--------------------------+-----------------------------------+
Die Datenbankkonfiguration wird nicht von mir erstellt, daher kann ich den Zeichensatz nicht ändern oder sortieren.
show create table t1;
+-------+-------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-------------------------------------------------------------------------------------------------------------------------+
| t1 | CREATE TABLE `t1` (
`col1` text CHARACTER SET latin1
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs |
+-------+-------------------------------------------------------------------------------------------------------------------------+
Hier ist der einfache Code zum Einfügen eines Namens mit Unicode-Zeichen.
private void insert() {
try {
loadJdbcProperties();
String myquery = "INSERT INTO db.t1(col1) VALUES (?)";
String url = "jdbc:mysql://localhost:3307/db?useUnicode=true&characterEncoding=Cp1252";
Properties prop = new Properties();
prop.put("user", "root");
prop.put("password", "root");
if (_jdbcProperties != null && !_jdbcProperties.isEmpty()) {
prop.putAll(_jdbcProperties);
}
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection c = DriverManager.getConnection(url, prop);
PreparedStatement pstmt = null;
String sql = null;
sql = myquery;
pstmt = c.prepareStatement(sql);
pstmt.setString(1, "csvźà.py");
pstmt.execute();
} catch (Exception e) {
e.printStackTrace();
}
}
Dies ist der Code für den Abruf. Hier
private void showResults() {
try {
loadJdbcProperties();
String myquery = "select col1 from db.t1";
String url = "jdbc:mysql://localhost:3307/db?useUnicode=true&characterEncoding=Cp1252";
Properties prop = new Properties();
prop.put("user", "root");
prop.put("password", "root");
if (_jdbcProperties != null && !_jdbcProperties.isEmpty()) {
prop.putAll(_jdbcProperties);
}
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection c = DriverManager.getConnection(url, prop);
PreparedStatement pstmt = null;
String sql = null;
ResultSet rs = null;
sql = myquery;
pstmt = c.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getString("col1"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
ist das Ergebnis:
csv?à.py
Dies ist, weil pro Java-Dokumentation, Java-Style Character Encoding Name für Latin1 ist Cp1252. https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-charsets.html – user3566773