их нет (они в ch недавно и очень слабые), то заворачивать в json кажется отличной идеей.
И не совсем понял насчет "форсит потоковый парсер", вы проверяли, что будет, если передать один из чаров: 8, 0, 13, 9, 26 ?
Вот полный код для экранирования строки в ClickHouse, он вставляет любые бинарные данные без проблем (проверено на продакшене на миллиардах вставленных строк :))🙂 // Escape escapes string for MySQL. It should work for ClickHouse as well. func Escape(txt string) string { var ( esc string buf bytes.Buffer ) last := 0 for ii, bb := range txt { switch bb { case 0: esc = \0 case '\n': esc = \n case '\r': esc = \r case '\\': esc = \\ case '\'': esc = \' case '"': esc = \" case '\032': esc = \Z default: continue } io.WriteString(&buf, txt[last:ii]) io.WriteString(&buf, esc) last = ii + 1 } io.WriteString(&buf, txt[last:]) return buf.String() }
Обсуждают сегодня