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
我正在使用 .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