【发布时间】:2011-02-07 06:17:21
【问题描述】:
我正在尝试编写一个 SQL 语句,该语句将生成一个 SQL 脚本,该脚本将使用从数据库中选择的 IMAGE 更新一个 BLOB 字段。
这就是我所拥有的:
select concat( 'UPDATE `IMAGE` SET THUMBNAIL = ',
QUOTE( THUMBNAIL ),
' WHERE ID = ', ID, ';' ) as UPDATE_STATEMENT
from IMAGE;
在上面,THUMBNAIL 是一个包含原始图像数据的 BLOB 字段。当我运行生成的脚本时,出现以下错误:
ERROR at line 2: Unknown command '\\'.
我第一次尝试不使用 QUOTE() 函数,如下所示:
select concat( 'UPDATE `IMAGE` SET THUMBNAIL = \'',
THUMBNAIL,
'\' WHERE ID = ', ID, ';' ) as UPDATE_STATEMENT
from IMAGE;
运行生成的脚本会产生以下错误:
ERROR at line 2: Unknown command '\0'.
在选择中应用于此 BLOB 字段的正确函数是什么,以便 UPDATE 语句可以工作?
如果需要上下文,我希望仅将在一台服务器上生成的缩略图迁移到另一台服务器,以获取某些图像 ID。我会使用 mysqldump,但我不想破坏整个表。
非常感谢任何帮助!
【问题讨论】:
-
我应该提一下,我知道这是可能的,因为 mysqldump 可以生成包含 BLOB 数据的 SQL INSERT 语句,但我不确定使用什么函数来正确转义数据。
-
你有没有看过 mysqldump 如何将它打算插入为 BLOB 的字符串转义?
-
我查看了 C 代码,但无法弄清楚它在做什么。如果我查看生成的 SQL,则在插入期间没有对字符串调用任何函数。它似乎只是 blob 字段的转储,其中单引号被黑斜线转义。我正在使用 REPLACE() 来查看如何在选择上执行此操作。
标签: sql mysql scripting blob dml