【问题标题】:Vertical Tab in Java and MYSQLJava 和 MYSQL 中的垂直制表符
【发布时间】:2019-10-19 02:48:02
【问题描述】:

我正在使用 Java 将数据插入到 MYSQL 表中,一列要求数据中包含 Vertical Tab 符号 (VT)。

我对php代码做了同样的事情,只需写“\v”就很简单了,表格中的数据如下所示:

问题从java不允许“\v”开始,所以我尝试用以下方式对字符进行编码:

byte[] utf8bytes = { (byte)0xE2, (byte)0x90, (byte)0x8B };
Charset utf8charset = Charset.forName("UTF-8");
String string = new String ( utf8bytes, utf8charset );
....
MysqlDataSource DATA_SOURCE = new MysqlDataSource();
PreparedStatement statement = connection.prepareStatement(sql_statement, Statement.RETURN_GENERATED_KEYS);
....
statement.setString(index++, (String) string);
.....

虽然这可行,但表本身中的最终数据会导致“?”。

我也尝试为 MysqlDataSource 设置字符集,但在这种情况下它不接受编码字符并且语句失败。

try {
     DATA_SOURCE.setCharacterEncoding("UTF-8");
} catch (SQLException ex) {
            Logger.getLogger(MyClass.class.getName()).log(Level.SEVERE, null, ex);
}

com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect string value: '\xE2\xAD\xBFdat...

希望您能帮助我找到在表格中插入垂直标签的正确方法。

【问题讨论】:

  • E2808B 是“零宽度空间”。
  • ? 来自于始终不使用 utf8。

标签: java mysql unicode


【解决方案1】:

我找到了解决方法。

我检查了数据库表中字节级别的单个垂直选项卡的现有php解决方案插入的数据:

SELECT hex(example_column) FROM `example_table` WHERE 1

结果:

我们可以使用我上面发布的示例代码轻松重现:

byte[] utf8bytes = { (byte)0x0B};
String string = new String ( utf8bytes );

【讨论】:

    猜你喜欢
    • 2016-03-29
    • 2014-06-08
    • 2013-06-20
    • 2011-10-30
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    相关资源
    最近更新 更多