2011-01-07 50 views
6

Tôi đang tìm nạp dữ liệu từ Máy chủ MySql vào R bằng RODBC.
Vì vậy, trong một cột của cơ sở dữ liệu là một vector nhân vậtChuỗi RODBC bị cắt bớt

SELECT MAX(CHAR_LENGTH(column)) FROM reqtable; 

RETURNS 26566

Bây giờ tôi sẽ cho bạn thấy một ví dụ làm thế nào tôi đang chạy vào vấn đề

`library(RODBC) 
con <- odbcConnect("mysqlcon") 
rslts <- as.numeric(sqlQuery(con, 
          "SELECT CHAR_LENGTH(column) FROM reqtable LIMIT 10", 
          as.is=TRUE)[,1]) 

' lợi nhuận

> rslts 
[1] 62 31 17 103 30 741 28 73 25 357 

nơi như rslts <- nchar(as.character(sqlQuery(con, "SELECT column FROM reqtable LIMIT 10", as.is=TRUE)[,1])) lợi nhuận

> rslts 
[1] 62 31 17 103 30 255 28 73 25 255 

Vì vậy, chuỗi có chiều dài> 255 là nhận được cắt ngắn ở 255. Có cách nào tôi có thể nhận được toàn bộ chuỗi.

Cảm ơn

+1

Câu hỏi này giải quyết được vấn đề cho tôi: http://stackoverflow.com/questions/22366195/rodbc-sqlquery-returns-varchar255-when-it-should-return-varcharmax – bart

Trả lời

2

Trình điều khiển ODBC PostgreSQL có một biến gọi là MaxLongVarcharSize mà tôi đã đặt là 8190 theo mặc định (tôi đã sử dụng nó cả trên Windows và Ubuntu). Có thể là trình điều khiển ODBC của MySQL có biến tương tự được đặt là 255.

+0

Hey bất kỳ ý tưởng làm thế nào để kiểm tra nó và chỉnh sửa nó? Tôi đoán nó là một vấn đề tương tự –

+2

Trên Windows bạn chọn nguồn dữ liệu của bạn (trong Control Panel | Công cụ quản trị | ODBC Sources) và bấm cấu hình, sau đó chọn nút có nguồn dữ liệu Biến MaxLongVarCharSize nằm ngay trên Ubuntu Bạn thêm dòng MaxLongVarcharSize = 256000 (hoặc bất kỳ) vào nguồn dữ liệu có liên quan trong tệp/etc/odbc.ini. – MiG62

1

Bạn có thể thử sử dụng trình điều khiển db khác như JDBC. Theo kinh nghiệm của tôi, điều này đôi khi đã giải quyết được vấn đề.

Ngoài ra, hãy thử các gói RMySQL (mã nhị phân hiện nay cần phải được biên dịch. Nếu bạn biên dịch chúng mình, yêu cầu bạn hãy chia sẻ với cộng đồng)

Có lẽ nguồn gốc của gói RODBC "có thể" cung cấp những hiểu biết vào giới hạn độ dài mặc định nếu có. (Tôi chưa xem xét nó, nhưng tôi sẽ sớm và đăng cập nhật tại đây)

+0

Xin cảm ơn ya nó hoạt động hoàn toàn tốt với một Kết nối JDBC. Tuy nhiên, nó không phải là lý do tại sao nó không hoạt động đúng với một kết nối ODBC: ( –

0

Một khả năng khác tại sao số lượng ký tự có thể bị giới hạn là hạn chế kiểm tra 'sanity' đối với 65535 byte trong gói RODBC - as mentioned here.

Các vấn đề liên quan