سؤال
أقوم بإحضار بيانات من خادم MySQL إلى R باستخدام RODBC.
لذلك في عمود واحد من قاعدة البيانات هو متجه الأحرف
SELECT MAX(CHAR_LENGTH(column)) FROM reqtable;
يعود 26566
الآن سأريكم مثالًا على كيفية مواجهة المشكلة
`library(RODBC)
con <- odbcConnect("mysqlcon")
rslts <- as.numeric(sqlQuery(con,
"SELECT CHAR_LENGTH(column) FROM reqtable LIMIT 10",
as.is=TRUE)[,1])
عائدات
> rslts
[1] 62 31 17 103 30 741 28 73 25 357
بينماrslts <- nchar(as.character(sqlQuery(con,
"SELECT column FROM reqtable LIMIT 10",
as.is=TRUE)[,1]))
عائدات
> rslts
[1] 62 31 17 103 30 255 28 73 25 255
لذا يتم اقتطاع السلاسل ذات الطول> 255 في 255. هل هناك طريقة يمكنني الحصول على السلسلة الكاملة.
شكرًا
المحلول
يحتوي برنامج تشغيل PostgreSQL ODBC على متغير يسمى MaxLongVarcharsize الذي وجدته تم تعيينه على 8190 افتراضيًا (لقد استخدمته على كل من Windows و Ubuntu). من الممكن أن يكون لبرنامج تشغيل MySQL ODBC متغيرًا مشابهًا إلى 255.
نصائح أخرى
يمكنك محاولة استخدام برنامج تشغيل DB آخر مثل JDBC. في تجربتي ، قام هذا في بعض الأحيان بحل المشكلة.
أيضًا ، جرب حزمة RMYSQL (يجب تجميع الثنائيات الحالية. إذا قمت بتجميعها بنفسك ، اطلب منك أن تشارك مع المجتمع)
ربما يمكن أن يوفر مصدر حزمة RODBC "رؤى حول قيود الطول الافتراضي إن وجدت. (لم أنظر إليها بعد ، لكنني سأقوم قريبًا بنشر تحديث هنا)
هناك احتمال آخر لسبب قيود عدد الأحرف المسترجع على قيود فحص "العقلانية" إلى 65535 بايت في حزمة RODBC نفسها - كما ذكر هنا.