H2 DB CSVWRITE 字符串中的重复双引号

Posted

技术标签:

【中文标题】H2 DB CSVWRITE 字符串中的重复双引号【英文标题】:H2 DB CSVWRITE Duplicate Double Quotes Inside a String 【发布时间】: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,  '|',  '');

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

提前致谢。

【问题讨论】:

【参考方案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版本还不支持这个功能。

以上是关于H2 DB CSVWRITE 字符串中的重复双引号的主要内容,如果未能解决你的问题,请参考以下文章

jQuery选择器因字符串中的双引号而失败[重复]

在逗号上拆分字符串并忽略双引号中的逗号[重复]

使用javascript从字符串中删除双引号[重复]

H2 db插入带引号的数据抛出异常

JavaScript中的双引号与单引号[重复]

js中的单引号与双引号[重复]