রেলপথে স্ট্রিং এবং পাঠ্যের মধ্যে পার্থক্য?


435

আমি পাগল ব্যবহার করে একটি নতুন ওয়েব অ্যাপ্লিকেশন তৈরি করছি, এবং হতাশ ছিল, এর মধ্যে পার্থক্য কি stringএবং text? এবং প্রতিটি ব্যবহার করা উচিত?

উত্তর:


522

পার্থক্য নির্ভর করে যে কীভাবে প্রতীকটিকে কোয়েরি ভাষায় স্ব স্ব কলামের ধরণে রূপান্তর করা হয়।

মাইএসকিউএল সহ: স্ট্রিংটি ভ্রচার (255) - এ ম্যাপ করা হয়েছে - http://guides.rubyonrails.org/migrations.html

:string |                   VARCHAR                | :limit => 1 to 255 (default = 255)  
:text   | TINYTEXT, TEXT, MEDIUMTEXT, or LONGTEXT2 | :limit => 1 to 4294967296 (default = 65536)

রেফারেন্স:

http://www.packtpub.com/article/Working-with-Rails-ActiveRecord-Migrations-Models-Scaffolding-and-Database-Completion

প্রত্যেকটি কখন ব্যবহার করা উচিত?

থাম্বের একটি সাধারণ নিয়ম হিসাবে, :stringসংক্ষিপ্ত পাঠ্য ইনপুট (ব্যবহারকারীর নাম, ইমেল, পাসওয়ার্ড, শিরোনাম, ইত্যাদি) ব্যবহার :textকরুন এবং বর্ণন, মন্তব্য সামগ্রী ইত্যাদির মতো দীর্ঘ প্রত্যাশিত ইনপুটটির জন্য ব্যবহার করুন


11
আমি মনে করি সর্বদা ব্যবহার করার জন্য থাম্বের একটি আরও ভাল নিয়ম :textDepesz.com/2010/03/02/charx-vs-varcharx-vs-varchar-vs-text
রিড জি আইন

74
মাইএসকিউএলের জন্য - এত বেশি নয়, আপনার ভারচারে সূচী থাকতে পারে, আপনি পাঠ্যে থাকতে পারবেন না।
ওমর কুরেশি

12
পোস্টগ্রাইএসকিউএল বাস্তবায়ন পাঠ্যকে পছন্দ করে। Pg স্ট্রিং / পাঠ্যের একমাত্র পার্থক্য স্ট্রিংয়ের দৈর্ঘ্যের ক্ষেত্রে সীমাবদ্ধ। কোনও পারফরম্যান্সের পার্থক্য নেই।
অ্যান্ডি বেটিসওয়ার্থ

এটি অ্যাক্টিভেকর্ডের সাথে পুরো গল্প বলে মনে হচ্ছে না। মান সংরক্ষণ করার trueএকটি varchar করার জন্য (অতএব, stringটাইপ ক্ষেত্র) মাইএসকিউএল মধ্যে মান সিরিয়েলাইজ 1(যা সম্পূর্ণরূপে ন্যায্য)। যাইহোক, textপ্রকারভেদে, "সত্য" মানটি সংরক্ষণ করে এটি এককালের চর হিসাবে সিরিয়ালে পরিণত হয় t। আমি এটি এবং ভবিষ্যতের সমস্ত সারি উপলব্ধি না করে একটি কলাম স্থানান্তরিত করেছি যেখানে মানটি এখন সত্য t। কারও কি এই আচরণের কোনও অন্তর্দৃষ্টি আছে?
পিটার

1
@ elli0t এর অর্থ আপনি সূচী করতে সক্ষম হবেন না। যদি এটি গুরুত্বপূর্ণ হয়, তবে আপনার মাইএসকিউএল
ওমর কুরেশি

157

আপনি যদি পোস্টগ্রাগেস ব্যবহার করেন তবে যেখানেই আপনি পাঠ্য ব্যবহার করতে পারেন, যদি না আপনার আকারের সীমাবদ্ধতা না থাকে যেহেতু পাঠ্য বনাম ভারচারের জন্য কোনও কার্যকারিতা জরিমানা নেই

ফাঁকা-প্যাডযুক্ত প্রকারটি ব্যবহার করার সময় বাড়ানো স্টোরেজ স্পেস এবং দৈর্ঘ্য-সীমাবদ্ধ কলামে স্টোর করার সময় দৈর্ঘ্য পরীক্ষা করার জন্য কয়েকটি অতিরিক্ত সিপিইউ চক্র ছাড়াও এই তিন ধরণের মধ্যে পারফরম্যান্সের পার্থক্য নেই। চরিত্রের (এন) কিছু অন্যান্য ডাটাবেস সিস্টেমে পারফরম্যান্স সুবিধা থাকলেও পোস্টগ্রিসএসকিউএলে তেমন কোনও সুবিধা নেই; প্রকৃতপক্ষে অক্ষর (এন) অতিরিক্ত স্টোরেজ ব্যয়ের কারণে সাধারণত তিনটির মধ্যে সবচেয়ে ধীর হয়। বেশিরভাগ পরিস্থিতিতে পরিবর্তে পাঠ্য বা চরিত্র পরিবর্তিত হওয়া উচিত

পোস্টগ্রিস এসকিউএল ম্যানুয়াল


4
কিন্তু ডাটাবেস অজ্ঞেহিত হওয়ার স্বার্থে, এটি কি সেরা পন্থা? আপনি যদি ডাটাবেস পরিবর্তন করতে চান? আমি বাস্তব দুনিয়ায় যা প্রায়শই ঘটে না, তবুও ... যদি 'কোনও পারফরম্যান্স পার্থক্য না থাকে' তবে ছোট জিনিসগুলির জন্য স্ট্রিংয়ের প্রত্যাশিত ব্যবহার এবং দীর্ঘ সময়ের জন্য পাঠ্য কেন আটকে থাকবেন না? এবং আপনার নিজস্ব মন্তব্য সূচিকর্ম স্ট্রিং দেওয়া, এখনও সেরা পদ্ধতির বলে মনে হচ্ছে।
ড্যান ব্যারন

6
রিয়েল ওয়ার্ল্ডে এটি প্রয়োজনীয় হয়ে উঠতে পারে এমন অনেকগুলি কারণ রয়েছে, যেখানে যে কোনও সমস্যারই ওয়ান ট্রুয়াল সলিউশন রয়েছে এই ধারণাটি পোষণ করা ভাল।
ড্যান ব্যারন

14
এটি হতে পারে, কিন্তু ডাটাবেস অজ্ঞাতবাদ একটি মিথ্যা নবী।
ওমর কুরেশি

2
পারফরম্যান্স পেনাল্টি তাৎপর্যপূর্ণ কিনা বা এটি অকাল অপটিমাইজেশনের ক্ষেত্রে? আমার অনুমান যে আপনি কখনই কোনও পার্থক্য লক্ষ্য করতে পারবেন না, যা অনুচ্ছেদে খোলার বিষয়টি নিশ্চিত করে মনে হচ্ছে: "এই তিন ধরণের মধ্যে পারফরম্যান্সের পার্থক্য নেই"।
ডেনিস

5
আপনি একটি ভাল কথা বলতে, কিন্তু আমি সম্পূর্ণরূপে বিশ্বাসী না। textওভার (n)ডেটা ধরণের ব্যবহারের জন্য সেই ব্লগ পোস্টে যুক্তিগুলি বিশ্বাসযোগ্য, তবে textওভার ব্যবহারের পক্ষে যুক্তিটি varcharনয়। তিনি বলেছেন যে তারা একই তবে পছন্দ হয় textকারণ এতে varcharবিভ্রান্ত হতে পারে varchar(n)এবং textটাইপ করার জন্য অক্ষর কম। তবে textপরিবর্তে ব্যবহার করে varchar, আপনি যে প্রসঙ্গটি সংরক্ষণ করেন তা হারাবেন যে সঞ্চিত ডেটা দীর্ঘ হওয়া উচিত নয়। উদাহরণস্বরূপ, ব্যবহারকারীর নাম সংরক্ষণ textকরা আমার কাছে বিভ্রান্তিকর বলে মনে হচ্ছে।
ডেনিস 13

17

স্ট্রিং আপনার ডাটাবেসে "বর্ণের" অনুবাদ করে, যখন পাঠ্যটি "পাঠ্যে" অনুবাদ করে। একটি বার্চারে অনেক কম আইটেম থাকতে পারে, একটি পাঠ্য যেকোন দৈর্ঘ্যের (প্রায়) হতে পারে।

ভাল রেফারেন্স চেক সহ গভীরতর বিশ্লেষণের জন্য http://www.pythian.com/news/7129/text-vs-varchar/ দেখুন

সম্পাদনা করুন: কিছু ডাটাবেস ইঞ্জিন একবারে লোড varcharকরতে পারে তবে টেবিলের বাইরে পাঠ্য (এবং ব্লব) সঞ্চয় করে। একজন SELECT name, amount FROM products, অনেক ধীর যখন ব্যবহার হতে পারে textজন্য nameচেয়ে যখন আপনি ব্যবহার varchar। এবং এরপরে, ডিফল্টরূপে SELECT * FROM...আপনার পাঠ্য-কলামগুলির সাথে রেকর্ডগুলি লোড হবে। এটি সম্ভবত আপনার বা আমার অ্যাপ্লিকেশনটিতে কখনই আসল সমস্যা হবে না, যদিও (অকাল অপটিমাইজেশন ...)। তবে পাঠ্যটি সর্বদা "ফ্রি" হয় না তা জেনে রাখা ভাল।


12

স্ট্রিং যদি আকারটি স্থির হয় এবং ছোট হয় এবং পাঠ্য যদি এটি পরিবর্তনশীল এবং বড় হয়। এটি এক ধরণের গুরুত্বপূর্ণ কারণ পাঠ্যটি স্ট্রিংয়ের চেয়ে অনেক বড়। এতে আরও অনেক কিলোবাইট রয়েছে।

সুতরাং ছোট ক্ষেত্রগুলির জন্য সর্বদা স্ট্রিং (বার্চর) ব্যবহার করুন। ক্ষেত্র পছন্দ। প্রথম নাম, লগইন, ইমেল, বিষয় (কোনও নিবন্ধ বা পোস্টের) এবং পাঠ্যগুলির উদাহরণ: লিখিত সামগ্রী বা কোনও পোস্ট বা নিবন্ধ। অনুচ্ছেদ ইত্যাদি জন্য ক্ষেত্র

স্ট্রিং আকার 1 থেকে 255 (ডিফল্ট = 255)

পাঠ্য আকার 1 থেকে 4294967296 (ডিফল্ট = 65536) 2


11

উপরে বর্ণিত হিসাবে কেবলমাত্র ডিবি ডেটাটাইপ এটি প্রভাবকে প্রভাবিত করবে যা আপনি ভাসিয়ে দিলে উত্পন্ন হবে। স্ট্রিং একটি টেক্সট_ফিল্ড পাঠ্য উত্পন্ন করবে একটি পাঠ্য_আরেআ তৈরি করবে


2

নাম, ঠিকানা, ফোন, সংস্থার মতো সংক্ষিপ্ত ক্ষেত্রের জন্য স্ট্রিং ব্যবহার করুন

বৃহত্তর সামগ্রী, মন্তব্য, সামগ্রী, অনুচ্ছেদের জন্য পাঠ্য ব্যবহার করুন Use

আমার সাধারণ নিয়ম, যদি এটি এক লাইনের বেশি কিছু হয় তবে আমি সাধারণত পাঠ্যের জন্য যাই, যদি এটি 2-6 টি সংক্ষিপ্ত শব্দ হয় তবে আমি স্ট্রিংয়ের জন্য যাই।

সরকারী নিয়ম একটি স্ট্রিংয়ের জন্য 255। সুতরাং, যদি আপনার স্ট্রিং 255 টিরও বেশি অক্ষরের হয় তবে পাঠ্যের জন্য যান।


1

যদি আপনি ওরাকল ব্যবহার করেন ... কলাম এবং একটি হিসাবে STRINGতৈরি করা হবে ।VARCHAR(255)TEXTCLOB

NATIVE_DATABASE_TYPES = {
    primary_key: "NUMBER(38) NOT NULL PRIMARY KEY",
    string: { name: "VARCHAR2", limit: 255 },
    text: { name: "CLOB" },
    ntext: { name: "NCLOB" },
    integer: { name: "NUMBER", limit: 38 },
    float: { name: "BINARY_FLOAT" },
    decimal: { name: "DECIMAL" },
    datetime: { name: "TIMESTAMP" },
    timestamp: { name: "TIMESTAMP" },
    timestamptz: { name: "TIMESTAMP WITH TIME ZONE" },
    timestampltz: { name: "TIMESTAMP WITH LOCAL TIME ZONE" },
    time: { name: "TIMESTAMP" },
    date: { name: "DATE" },
    binary: { name: "BLOB" },
    boolean: { name: "NUMBER", limit: 1 },
    raw: { name: "RAW", limit: 2000 },
    bigint: { name: "NUMBER", limit: 19 }
}

https://github.com/rsim/oracle-enhanced/blob/master/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb


1

গৃহীত উত্তরটি দুর্দান্ত is আমার জন্য এটি পুরোপুরি করেনি।

সর্বাধিক আকার : সীমা => 1 থেকে 4294967296 ঠিক তেমন কাজ করেনি, সেই সর্বোচ্চ আকার থেকে আমাকে -1 যেতে হবে। আমি বড় JSON ব্লব সংরক্ষণ করছি এবং তারা কখনও কখনও বিশাল হতে পারে।

মাইএসকিউএল যে মানটির বিষয়ে অভিযোগ করে না তার সাথে বৃহত্তর মান সহ আমার স্থানান্তর এখানে।

উল্লেখ্য 5 সীমা শেষে পরিবর্তে 6

class ChangeUserSyncRecordDetailsToText < ActiveRecord::Migration[5.1]
  def up
    change_column :user_sync_records, :details, :text, :limit => 4294967295
  end

  def down
    change_column :user_sync_records, :details, :string, :limit => 1000
  end
end

0

অ্যাট্রিবিউট মিলে হয়, তাহলে f.text_fieldফর্ম ব্যবহারে স্ট্রিং , এটা মিলে হলে f.text_areaব্যবহার টেক্সট

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.