【问题标题】:MySQL Linked Server can't update longtextMySQL Linked Server 无法更新长文本
【发布时间】:2018-08-04 15:15:40
【问题描述】:

我有一个从 SQL Server 到我的 mySQL 数据库的链接服务器(Windows Server 使用 MySQL ODBC Driver 5.3)。我有一个独特的情况,如果我在 OPEN QUERY 中转换它们,我只能让我的 longtext 列返回:

SELECT * 
FROM
OPENQUERY (woocommerce, 'SELECT meta_id, CONVERT(meta_value using UTF8) as meta_value
                         FROM woocommerce.wp_postmeta WHERE meta_id = 9465078') 

如果我不转换/转换它,我会从链接服务器收到以下错误:

Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "MSDASQL" for linked server "woocommerce" reported an error. The provider reported an unexpected catastrophic failure.

我需要更新这个长文本列“meta_value”,但我不能,因为它已被转换/转换。

    UPDATE 
    OPENQUERY (woocommerce, 'SELECT meta_id, CONVERT(meta_value using utf8) 
                             FROM woocommerce.wp_postmeta WHERE meta_id = 9465078') 
    SET meta_value = 'outofstock';

有没有办法使用 OPENQUERY 和链接服务器来更新转换/转换的列?我尝试过以各种方式转换或投射它。

【问题讨论】:

  • meta_value 是 null 还是根据定义不为 null?
  • 不为空。那会影响它吗?现在我们通过创建一个名为 meta_value_overflow(文本类型)的第二列来解决这个问题,但如果我们可以只有一个 longtext 列,那将是理想的。
  • 对不起,我不明白你在做什么,你能提供图表吗?对我来说,您似乎不需要 SELECT meta_value 您不会在任何地方使用它。你不能只是:UPDATE OPENQUERY (woocommerce, 'SELECT meta_id FROM woocommerce.wp_postmeta WHERE meta_id = 9465078') SET meta_value = 'outofstock';。 ?

标签: mysql linked-server openquery


【解决方案1】:

驱动程序似乎对LONGTEXT 列有问题。

您可以使用以下选项限制LONGTEXT 列的大小:

Limit column size to signed 32-bit range

(请注意不要丢失您的数据,但这种情况很少见,我认为任何字符串都不会超过 10 亿个字符 XD)

The last comment here would help you how to do that

现在您可以移除演员表并可以正常进行更新了。

【讨论】:

    猜你喜欢
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 2015-05-28
    • 2013-12-04
    • 1970-01-01
    • 2015-05-19
    相关资源
    最近更新 更多