【问题标题】:H2 DB CSVWRITE Duplicate Double Quotes Inside a StringH2 DB CSVWRITE 字符串中的重复双引号
【发布时间】:2013-03-15 10:11:45
【问题描述】:

我尝试使用CSVWRITE 函数将H2 DB 中的表导出为CSV,并发现双引号是否包含在varchar 列中,它们将被复制。

例如。 - 'hello"howareyou' will be 'hello""howareyou' in the written csv.

尝试使用转义字符和其他一些组合保存此 varchar 列,但结果相同。

以下是我为测试此问题而创建的表格列以及我得到的结果 CSV 值。

    My column         CSV written value
    ------------------------------
    hello"how         hello""how
    hello\"how        hello\""how
    hello""how        hello""""how
    hello\""how       hello\""""how
    hello\\"how       hello\\""how
    hello\\\\"how     hello\\\\""how
    hello["]how       hello[""]how
    hello&quote;how   hello&quote;how

以下是我的 CSVWrite 命令:

    CALL CSVWRITE(
      '#DELTA_CSV_DIR#/DELTA.csv', 
      'SELECT ccc from temptemp', 
      null,  '|',  '');

我做错了吗?或者我可以使用任何选项或解决方法来避免这种情况?

提前致谢。

【问题讨论】:

    标签: database csv h2


    【解决方案1】:

    您目前正在使用 the built-in CSVWRITE function 和以下选项:

    • fileName = '#DELTA_CSV_DIR#/DELTA.csv'
    • query = 'SELECT ccc from temptemp'
    • characterSet = 默认 (UTF-8)
    • fieldSeparator = '|'
    • fieldDelimiter = ''(空字符串)

    As documented, the default escape character is a double quote,以便使用双引号对双引号进行转义(与在 Java 字符串中使用反斜杠转义反斜杠的方式相同)。需要转义字符来转义字段分隔符。

    您可以按如下方式禁用转义字符:

    CALL CSVWRITE(
      '#DELTA_CSV_DIR#/DELTA.csv', 
      'SELECT ccc from temptemp', 
      'fieldSeparator=| fieldDelimiter= escape=');
    

    这也为选项使用了更具可读性的新格式。

    【讨论】:

    • 谢谢@Thomas。有用。仅供参考 - 在 h2-1.2.140 上对此进行测试并得到 java.io.UnsupportedEncodingException。升级到最新的 h2-1.3.171 并且可以工作。
    • 你说得对,1.2.140版本还不支持这个功能。
    猜你喜欢
    • 2014-09-26
    • 2013-04-19
    • 1970-01-01
    • 2014-09-20
    • 2013-03-14
    • 1970-01-01
    • 2019-06-27
    • 2017-09-08
    • 2017-02-19
    相关资源
    最近更新 更多