这是我目前的字符集。我试图插入latin1字符,我无法让它工作。
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/ |
+--------------------------+-----------------------------------+
数据库配置不是由我创建的,所以我无法更改字符集或整理。
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 |
+-------+-------------------------------------------------------------------------------------------------------------------------+
以下是使用unicode字符插入名称的简单代码。
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();
}
}
这是检索的代码。
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();
}
}
结果如下:
csv?à.py
答案 0 :(得分:0)
ź
字符(Unicode代码点U+017A
)未包含在latin1字符集中,因此MySQL无法将其存储在latin1
列中。 (对于记录,它也不在Windows-1252字符集中。)
如果您确实需要在该列中存储该字符,则需要
utf8
或csv\u017aà.py
)并相应调整您的代码。