Redshift ODBC驱动程序错误:字符串数据右截断来自数据源的数据:字符串数据对于驱动程序的数据缓冲区来说太大了

时间:2015-04-20 17:29:36

标签: c# odbc amazon-redshift

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

该表格包含一个名为' email'并定义为VARCHAR(MAX) 在插入具有非标准字符的行(例如,3/4字符或带有重音符号的法语e)之前,所有行都被插入而没有问题。此时我收到以下错误:

"字符串数据右截断来自数据源的数据:字符串数据对于驱动程序的数据缓冲区来说太大了。"

这是连接字符串(使用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"这样的客户端程序插入行时,行被插入属性,这使我相信问题不在表定义中。

以下是在客户端程序中有效的插入内容(该电子邮件故意不是合法的电子邮件):

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

以下是表格定义:

CREATE TABLE summary.member (  member_id VARCHAR(255)DISTKEY,  member_email VARCHAR(255) ) SORTKEY (  会员ID,  MEMBER_EMAIL );

以下是打开连接的代码:

  

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

        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();
    }

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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