سؤال

SQL...

UPDATE Threads t 
SET t.Content = (
    SELECT GROUP_CONCAT(a.Content ORDER BY a.PageID SEPARATOR '<!-- pagebreak -->') 
    FROM MSarticlepages a
    WHERE a.ArticleID = t.MSthreadID GROUP BY a.ArticleID
)

كما ترون ، يستغرق الأمر جميع صفحات المقالة (التي يتم تخزين كل منها كصاحد طويل في صفوف منفصلة) و Group_Concats في صف واحد طويل.المشكلة هي أن النتائج ليست سوى العديد من الشخصيات ، ثم يتم اقتطاعها تمامًا ، وفقدت حوالي 90 ٪ من المحتويات.هل لا تتعامل مع النص LongteTex بشكل جيد أم أن هناك شيئًا آخر أخطأ؟

هل كانت مفيدة؟

المحلول

بحسب ال دليل ماي اس كيو ال, ، الحد الأقصى لطول GROUP_CONCAT يتم تعريفه بواسطة group_concat_max_len متغير النظام، والذي يكون افتراضيًا 1024.

ويمكن زيادة هذه القيمة باستخدام الأمر التالي:

SET group_concat_max_len = <int>

ولكن تجدر الإشارة إلى أن قيمة group_concat_max_len في حد ذاته محدود بقيمة متغير نظام آخر، max_allowed_packet, ، والذي الافتراضي هو 1,048,576.

يمكن زيادة هذه القيمة إلى 1,073,741,824 كحد أقصى، باستخدام نفس الصيغة:

SET max_allowed_packet = <int>

نصائح أخرى

وعنوان هذا المنصب هو "مشكلة مع CONCAT وLongtext" والذي هو مضلل لأنه الذي طرح السؤال حقا تريد معرفته عن GROUP_CONCAT. أعتقد أن هذا الموضوع في جوجل لأنني كنت تتعامل مع وجود قيود مع CONCAT في الخلية. لأولئك منكم الذين يجدون هذا المنصب، وتبحث عن كيفية زيادة سمح لCONCAT طول ماكس هنا هو كيف نفعل ذلك:

ويتم ضبط group_concat_max_len المشكلة لن تعمل لCONCAT أنها لا تعمل إلا لGROUP_CONCAT مما يعني أنه إذا كنت تقوم بتشغيل إلى هذا الحد مع CONCAT سيكون لديك لإعادة صياغة الاستعلام الخاص بك لاستخدام GROUP_CONCAT.

وهكذا نقول لكم تستخدم CONCAT على النحو التالي:

UPDATE some_table
SET some_field=CONCAT(some_field,'super long string to append to the end of the data in some_field')
WHERE some_criteria_field = 'match on this string';

ولكن البيانات التي تحاول سلسلة في نهاية محتويات some_field هو الحصول على طائرة اقتطاع أو مجرد وضع some_field الحقل فارغة / فارغة. حتى هنا هو الطريقة سوف الاستعلام يجب أن ننظر إلى تخفيف القيود واضحة من CONCAT:

SET @@session.group_concat_max_len = @@global.max_allowed_packet;
UPDATE some_table SET some_table.some_field=(
     SELECT GROUP_CONCAT( queue.append_to_end SEPARATOR '') as new_some_field
     FROM
     (
          SELECT append_to_end FROM some_table WHERE some_criteria_field = 'match on this string'
          UNION
          SELECT 'super long string to append to the end of the data in some_field' as append_to_end
     ) as queue
) WHERE some_criteria_field = 'match on this string'

لأكثر في عمق المعلومات تحقق من هذه المادة حيث وجدت هذه الإجابة في رفع الصوت عاليا الارتباط. المصدر: http://boulderapps.co/mysql-concat-limitation

وGROUP_CONCAT في مستندات الخلية:

<اقتباس فقرة>   

ويتم اقتطاع النتيجة إلى الحد الأقصى   طول التي تعطى من قبل   group_concat_max_len متغير النظام،   الذي له قيمة افتراضية من 1024.   يمكن تعيين قيمة أعلى، على الرغم من أن   الطول الأقصى الفعال للعودة   مقيدة القيمة قيمة   max_allowed_packet. بناء الجملة ل   تغيير قيمة   group_concat_max_len في وقت التشغيل كما هو   التالي، حيث فال هو غير موقعة   صحيح:

SET [GLOBAL | SESSION] group_concat_max_len = val;

HTTP: // ديف .mysql.com / وثيقة / RefMan معلومات / 5.0 / EN / مجموعة تلو functions.html # function_group-CONCAT

وآمل أن يساعد هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top