Redshift ODBC Driver error: String data right truncation on data from data source: String data is too big for the driver's data buffer

Redshift ODBC Driver error: String data right truncation on data from data source: String data is too big for the driver's data buffer

我正在使用 .NET 的 RedShift ODBC 驱动程序将行插入 RedShift 数据库 table。

table 包含一个名为 'email' 的列,定义为 VARCHAR(MAX) 在插入具有非标准字符(例如 3/4 字符或带有重音符号的法语 e)的行之前,所有行都会毫无问题地插入。那时我收到以下错误:

"String data right truncation on data from data source: String data is too big for the driver's data buffer."

这里是连接字符串(使用string.Format替换部分信息):

Driver={{Amazon Redshift (x64)}};Server={0};Database={1};UID={2};PWD={3};Port={4};SSL=true;Sslmode=Require;MaxVarchar=1000;UseUnicode=1"

我添加了最后两个参数以查看它们是否有帮助,但没有它们它也不起作用。

附加信息:当我使用 "Aginity" 等客户端程序插入行时,行被插入 属性,这让我相信问题不在于 table定义。

这是在客户端程序中工作的插入(电子邮件故意不是合法电子邮件):

insert into summary.member values ('59D6687E-078F-45EA-8736-9A08AA85AD4D', 'shrew8@gmail¾comdde')

这里是 table 定义:

创建 TABLE summary.member ( member_id VARCHAR(255) DISTKEY, member_email 变量(255) ) 排序键 ( member_id, member_email );

这是打开连接的代码:

private static OdbcConnection CreateAndOpenOdbcConnection() { const string server = "someserverinfo.redshift.amazonaws.com"; const string port = "5439"; const string masterUsername = "myusername"; const string masterUserPassword = "mypassword"; const string dbName = "databasename";

        var connectionString =
            string.Format(
                "Driver={{Amazon Redshift (x64)}};Server={0};Database={1};UID={2};PWD={3};Port={4};SSL=true;Sslmode=Require;MaxVarchar=1000;UseUnicode=1",
                server, dbName, masterUsername, masterUserPassword, port);
        var odbcConnection = new OdbcConnection(connectionString);
        odbcConnection.Open();
        return odbcConnection;
    }

这是执行插入的代码:

   private int InsertMember(Guid column1data, string column2data)
    {
        var command = new OdbcCommand(string.Format("INSERT INTO database.table (column1, column2, column3) values(?, ?, ?)"), Connection);
        command.Parameters.AddWithValue("@column1", column1data.ToString());
        command.Parameters.AddWithValue("@column2", column2data);
        command.Parameters.AddWithValue("@column3", "column3data");
        return command.ExecuteNonQuery();
    }

此问题的解决方法是使用 PostgreSQL UNICODE 驱动程序而不是 RedShift 驱动程序。似乎 RedShift 驱动程序中可能存在导致此行为的错误。我已通知 AWS 支持,他们正在调查。

Amazon 已发布其 ODBC 驱动程序的更新以解决此问题: http://docs.aws.amazon.com/redshift/latest/mgmt/install-odbc-driver-windows.html