【发布时间】:2020-06-11 06:41:28
【问题描述】:
我想对 Firebird 表进行更新。到目前为止还没有问题:
update MYTABLE
set params = replace(params, 'SOMEHOST', 'SOMENEWHOST')
在更新语句之前,我的参数如下所示:
s:91:"{"server":"SOMEHOST","port":"21","ssl":false,"user":"DUMMY","pwd":"SECRET","path":"FOLDER"}";
在我更新后,参数如下所示:
s:91:"{"server":"SOMENEWHOST","port":"21","ssl":false,"user":"DUMMY","pwd":"SECRET","path":"FOLDER"}";
到目前为止一切正常。
但前端程序无法处理,因为参数中有校验和。
值 s:91 是从左大括号到右大括号的字符长度。
由于存在另一个路径、用户或密码,因此字符长度可能因行而异。
是否可以计算从左大括号到右大括号的字符长度并用 Firebird 扩展更新语句?
【问题讨论】:
-
's:91' 设置在哪里?它是您表中的另一列吗?还是在运行时计算?但是,计算 { 和 } 之间的长度不是问题 - 您可以为此使用 charindex
-
老实说,您似乎应该对数据进行规范化。
-
's:91' 设置在同一列参数中。所以它是一种前缀。这是一个火鸟数据库。
-
Firebird 还是 SQL Server ?,因为您已将其标记为 SQL Server,但在评论中说 Firebird
-
在前端执行,或者在您的应用程序的任何部分执行您存储在
"params"字段中的腌制/冻结/序列化 JSON。你可以强制某些东西工作,但除非你的逻辑理解编码,否则它对所有可能的值永远都不安全。 (例如,如果 SOMEHOST 作为“user”或“pwd”或“path”值的一部分出现怎么办?)这类似于使用sed编辑 CSV 文件——它工作得很好,直到它没有。