سؤال

ما يعادل VARCHAR (حد أقصى) في الخلية؟

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

المحلول

وطول الحد الأقصى من VARCHAR يخضع لحجم صف أقصى في الخلية، وهو 64KB (دون احتساب النقط):

VARCHAR(65535)

ولكن، لاحظ أن الحد الأقصى هو أقل إذا كنت تستخدم مجموعة أحرف متعددة البايت:

VARCHAR(21844) CHARACTER SET utf8

وهنا بعض الأمثلة:

والحد الأقصى لحجم الصف 65535، ولكن يشمل أيضا VARCHAR بايت أو اثنين لترميز طول سلسلة معينة. لذلك أنت في الواقع لا يمكن إعلان VARCHAR من الحد الأقصى لحجم صف واحد، حتى لو كان العمود الوحيد في الجدول.

mysql> CREATE TABLE foo ( v VARCHAR(65534) );
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

ولكن إذا حاولنا أطوال تناقص، نجد أن أكبر طول يعمل:

mysql> CREATE TABLE foo ( v VARCHAR(65532) );
Query OK, 0 rows affected (0.01 sec)

والآن لو كنا في محاولة لاستخدام محارف متعددة البايت على مستوى الجدول، نجد أن ذلك ضروريا كل حرف كما بايت متعددة. سلاسل UTF8 لا <م> بالضرورة استخدام بايت متعددة في سلسلة، ولكن الخلية لا يمكن أن تفترض أنك سوف تقيد جميع الملاحق الخاصة بك في المستقبل إلى أحرف بايت واحد.

mysql> CREATE TABLE foo ( v VARCHAR(65532) ) CHARSET=utf8;
ERROR 1074 (42000): Column length too big for column 'v' (max = 21845); use BLOB or TEXT instead

وعلى الرغم من ما قال لنا الخطأ الأخير، ك InnoDB لا يزال لا يحب بطول 21845.

mysql> CREATE TABLE foo ( v VARCHAR(21845) ) CHARSET=utf8;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

وهذا يجعل الشعور بالكمال، إذا كنت تحسب أن 21845 * 3 = 65535، الذي لم يكن ليعمل على أي حال. في حين أن 21844 * 3 = 65532، والتي لا عمل.

mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
Query OK, 0 rows affected (0.32 sec)

نصائح أخرى

ما هو VARCHAR (حد أقصى)؟

وvarchar(max) هي ميزة من Microsoft SQL Server.

وكمية البيانات التي عمود يمكن تخزين في الإصدارات ملقم Microsoft SQL قبل إلى الإصدار 2005 اقتصر على 8KB. من أجل تخزين أكثر من 8KB كنت قد اضطرت إلى استخدام TEXT، NTEXT، أو الأعمدة BLOB أنواع، هذه الأنواع عمود تخزين البيانات الخاصة بهم كمجموعة من 8K صفحات منفصلة عن صفحات البيانات الجدول؛ وأيدوا تخزين ما يصل إلى 2GB في صف واحد.

وكان التحذير الكبير لهذه الأنواع العمود الذي عادة ما يتطلب وظائف خاصة والبيانات للوصول إلى وتعديل البيانات (على سبيل المثال READTEXT، WRITETEXT، وUPDATETEXT)

في SQL Server 2005 أو قدم varchar(max) لتوحيد البيانات والاستفسارات تستخدم لاسترجاع وتعديل البيانات في الأعمدة الكبيرة. يتم تخزين البيانات للأعمدة varchar(max) مضمنة مع صفحات بيانات الجدول.

وكما يتضح من البيانات في العمود MAX يملأ صفحة البيانات 8KB صفحة الفائض يتم توزيع ونقاط الصفحة السابقة لها تشكيل قائمة مرتبطة. على عكس TEXT، NTEXT، وBLOB وvarchar(max) نوع العمود تدعم كل نفس دلالات الاستعلام عن أنواع العمود الأخرى.

وهكذا varchar(MAX) يعني حقا varchar(AS_MUCH_AS_I_WANT_TO_STUFF_IN_HERE_JUST_KEEP_GROWING) وليس varchar(MAX_SIZE_OF_A_COLUMN).

مسقل ليس لديها لغة ما يعادلها.

في أجل الحصول على نفس كمية التخزين كما varchar(max) في الخلية كنت لا تزال بحاجة إلى اللجوء إلى نوع العمود BLOB. هذه المقالة يناقش طريقة فعالة جدا لتخزين كميات كبيرة من البيانات في الخلية بكفاءة.

وطول الحد الأقصى من VARCHAR هو

65535

ومقسوما على طول بايت كحد أقصى من حرف في مجموعة الأحرف يتم تعيين أي عامود ل(مثل UTF8 = 3 بايت، UCS2 = 2، LATIN1 = 1).

وناقص 2 بايت لتخزين طول

وناقص طول كافة الأعمدة الأخرى

وناقص 1 بايت لكل 8 الأعمدة التي هي قيم الفارغة. إذا العمود الخاص بك هو باطل / لا فارغة هذا يحصل تخزينها واحدة بت في البايت / بايت يسمى قناع لاغية، 1 بت لكل العمود الذي هو قيم الفارغة.

ل SQL Server

وتغيير prg_ar_report_colors الجدول إضافة Text_Color_Code VARCHAR (حد أقصى)؛

للمسقل

وتغيير prg_ar_report_colors الجدول إضافة Text_Color_Code longtext؛

لأوراكل

وتغيير prg_ar_report_colors الجدول إضافة Text_Color_Code CLOB؛

والخلية تحويل عمود من VARCHAR على النص عند تحت حجم الحد!

mysql> CREATE TABLE varchars1(ch3 varchar(6),ch1 varchar(3),ch varchar(4000000))
;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> SHOW WARNINGS;
+-------+------+---------------------------------------------+
| Level | Code | Message                                     |
+-------+------+---------------------------------------------+
| Note  | 1246 | Converting column 'ch' from VARCHAR to TEXT |
+-------+------+---------------------------------------------+
1 row in set (0.00 sec)

mysql>

وطول الحد الأقصى من VARCHAR في الخلية 5.6.12 هو 4294967295.

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