چرا در mysql به جای varchar(255) بهتره که varchar(191) استفاده کنیم؟

حین نوشتن کد قسمت دیتابیس برای بحث migration در mysql این سوال برای خودم پیش اومد که چرا وقتی قراره یه فیلد stringی مثل email رو تو دیتابیس تعریف کنیم بهتره که varchar(191) استفاده کنیم و نه varchar(255)

به صورت خلاصه علتش ایندکس هست. معمولا فرمت encoding دیتابیس رو روی utf8mb4 تنظیم میکنن که پشتیبانی خوبی از کاراکترهای فارسی و غیره داشته باشه. و در innodb برای ذخیره سازی هر کاراکتر با این encoding به ۴ بایت احتیاج هست. و از سمت دیگه innodb محدود ۷۶۷ بایتی برای ایندکس کردن داره. یعنی اگه شما بخواید فیلدی که کاراکترهای فارسی هم داره مثل نام کاربر رو ایندکس کنید، مجبور هستید حداکثر ۱۹۱ کاراکتر ۴ بایتی داشته باشید که سقف ۷۶۷ بایت برای ایندکس رو رد نکنه.

این مقاله به خوبی توضیح داده که چرا وقتی از innodb به عنوان engine استفاده میکنیم برای mysql بهتره که varchar(191) استفاده کنیم.

5 پسندیده

این قضیه توی پستگرس چطوره؟

تا جایی که یادمه اونجا چنین مشکلی نیست.

1 پسندیده