VARCHARS: 2، 4، 8، 16، وما إلى ذلك؟ أو 1، 3، 7، 15، وما إلى ذلك؟

StackOverflow https://stackoverflow.com/questions/1224226

سؤال

وأرى VARCHAR (255) تستخدم في كل وقت بدلا من VARCHAR (256)، ولكن أرى أيضا VARCHAR (16) تستخدم بدلا من VARCHAR (15). ويبدو أن هذا يتعارض لي. في حالة استخدام بايت إضافية لتخزين طول VARCHAR، ويجب أن لا تنطبق هذه القاعدة أيضا إلى أطوال صغيرة مثل 2 و 4 و 8 لتكون 1، 3، 7، بدلا من ذلك؟

وأو أنا شيء مفقود تماما؟

وبعبارة أخرى، إذا كان لدي عدد أنني أعرف لن يكون فوق 12، وأود أن مجرد المضي قدما واستخدام VARCHAR (15) أو VARCHAR (16) بدلا من ذلك؟ لأنه يستخدم نفس المقدار من الفضاء باعتباره VARCHAR (12)؟ إذا كان الأمر كذلك، وهو واحد يمكنني استخدامها؟ 15 أو 16؟ هل هذا التغيير الحكم على الإطلاق عندما أحصل على أقرب إلى 256؟

وأنا استخدم كل من الخلية وSQL، اعتمادا على المشروع.

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

المحلول

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

وبعبارة أخرى، إذا كان لدي عدد أنني أعرف لن يكون فوق 12، وأود أن مجرد المضي قدما واستخدام VARCHAR (15) أو VARCHAR (16) بدلا من ذلك؟

ولا! استخدام VARCHAR (12) (أو ربما حتى شار (12) إذا كان طول ثابت إلى حد ما).

وذات مرة كان نوع VARCHAR تقتصر على 255 حرفا على بعض الأنظمة (<لأ href = "http://forums.mysql.com/read.php؟98،37000،37052" يختلط = "نوفولو noreferrer" > بما في ذلك الخلية قبل 5.0.3 ) لأن البايت الأول المخزنة أشار طول الحقل. ونظرا لهذا القيد، المشروعات الإنمائية يريد أن يسمح أن كمية معقولة من النص اختيار 255 بدلا من الذهاب إلى نوع بيانات مختلف تماما.

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

نصائح أخرى

وعليها أن تفعل مع الأعداد الفردية أو حتى لا شيء.

وتاريخيا، كان 255 حرفا في كثير من الأحيان الحد الأقصى لطول VARCHAR في مختلف DBMSes. وكان الحد الأقصى لطول الحقل الذي لم يكن LOB (كائن كبير) في ذلك الوقت 255 بايت (1 بايت الباحث). لذلك تم استخدام البايت الأول لتخزين طول الحقل (0-255)، وبايت في n المتبقية للشخصيات. لهذا السبب كنت كثيرا ما نرى VARCHAR(255).

وإذا كان الحقل لن تكون أكبر من 12، واستخدام VARCHAR(12).

وأعتقد أن المشكلة الأصلية هي أن لبعض الأنظمة VARCHAR (...) كان محدودا إلى 255، وذلك لأن عند استخدام بايت واحد لترميز طول الفعلي، يمكنك التعبير فقط أطوال تصل 255.

وVARCHAR (16) / VARCHAR (15) انها على الأرجح تذكر هذه الأصول، ولكن هناك شيء خاص في القيمتين.

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