gpt4 book ai didi

MySQL 通过 ODBC 5.2 插入到 bit(1) 列

转载 作者:行者123 更新时间:2023-11-29 03:39:13 26 4
gpt4 key购买 nike

我已经搜索过了,但似乎找不到我要找的东西。我在 Oracle 中运行 PL/SQL 脚本,并尝试使用 MySQL ODBC 5.2 Unicode 驱动程序通过数据库链接将记录插入到 MySQL 中的表中。

该链接工作正常,我可以使用它在 Oracle 中执行复杂查询,并对那里的记录执行各种插入和更新。

它失败的地方在于尝试将记录插入到具有 bit(1) 类型列的 MySQL 表中。

它基本上是一个循环游标,插入语句看起来像这样:

INSERT INTO "app_user"@mobileapi (USERNAME, VERSION, ACCOUNT_EXPIRED, ACCOUNT_LOCKED, PASSWD, PASSWORD_EXPIRED)
VALUES (CU_rec.USERNAME, CU_rec.VERSION, CU_rec.ACCOUNT_EXPIRED, CU_rec.ACCOUNT_LOCKED, CU_rec.PASSWD, CU_rec.PASSWORD_EXPIRED)

一些目标列,如ACCOUNT_EXPIREDACCOUNT_LOCKED等是MySQL中的bit(1)列。鉴于我可以将游标 CU_rec 中的数据类型转换为我在 Oracle 中想要的几乎任何类型,我如何才能将它们插入到目标中?我已经尝试了所有我能想到的方法,而且我不断得到:

错误报告:

ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
[MySQL][ODBC 5.2(w) Driver][mysqld-5.6.10]Data too long for column 'ACCOUNT_EXPIRED' at row 1 {HY000,NativeErr = 1406}
ORA-02063: preceding 2 lines from MOBILEAPI
ORA-06512: at line 44
28500. 00000 - "connection from ORACLE to a non-Oracle system returned this message:"
*Cause: The cause is explained in the forwarded message.
*Action: See the non-Oracle system's documentation of the forwarded
message.

如有任何帮助,我们将不胜感激。

最佳答案

你的问题是 Oracle 的 default datatype conversion通过 ODBC;根据他们自己的文档,他们将 SQL_BINARY 转换为原始的。虽然没有直接关系,Oracle's comparison of MySQL and Oracle within SQL Developer还暗示了一个事实,即从 MySQL 位自动转换为 Oracle 原始数据。

非常困惑,MySQL's documentation表示某个位被转换为 SQL_BIT 或 SQL_CHAR,这意味着它可能在另一个方向上工作1

根据 Microsoft's ODBC docs从理论上讲,您应该能够使用 CONVERT() 函数将其转换为一个字符,从理论上讲,该字符应该可以由 MySQL 翻译。

insert into some_table@some_db (bit_col)
values( {fn convert(some_col, SQL_CHAR)} );

如果没有,还有另外几个选项,但这取决于您尝试从 Oracle 插入 MySQL 数据库的内容以及 Oracle 中的数据类型。例如,您可以使用 Oracle CAST()函数在数据类型之间进行转换。例如,以下代码会将整数转换为二进制 double 。

select cast(1 as binary_double) from dual

不幸的是,您不能将整数转换为原始数据,只能将字符或 rowid 转换为原始数据,因此要转换为原始数据,您必须执行以下操作:

select cast(to_char(1) as raw(1)) from dual

我不知道 MySQL 是否会接受这个,但通过一些测试你应该能够解决这个问题。

<子>1。为清楚起见,我从未在任何一个方向上尝试过。

关于MySQL 通过 ODBC 5.2 插入到 bit(1) 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16777708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com