এনভারচর (সর্বাধিক) বনাম এনটেক্সট


183

এসকিউএল সার্ভারে nvarchar(max)বনাম NTextতথ্য প্রকারগুলি ব্যবহারের সুবিধা এবং অসুবিধাগুলি কী কী ? আমার পশ্চাদপটে সামঞ্জস্যের দরকার নেই, সুতরাং এটি nvarchar(max)পুরানো এসকিউএল সার্ভারের রিলিজগুলিতে সমর্থিত নয় fine

সম্পাদনা: দৃশ্যত প্রশ্নও ক্ষেত্রে প্রযোজ্য TEXTএবং IMAGEবনাম varchar(max)এবং varbinary(max)সেই পরে ডেটা-ধরনের জন্য ঐ অনুসন্ধানের জন্য।

উত্তর:


197

সুবিধার যে আপনার মতো কাজগুলির ব্যবহার করতে পারেন LENএবং LEFTউপর nvarchar(max)এবং আপনার বিরুদ্ধে ব্যবহার করতে পারবেন না ntextএবং text। আপনার যেখানে ব্যবহার করতে হয়েছে এবং তার nvarchar(max)চেয়ে কাজ করাও সহজ ।textWRITETEXTUPDATETEXT

এছাড়াও, text, ntextইত্যাদি অবচিত হচ্ছে ( http://msdn.microsoft.com/en-us/library/ms187993.aspx )


12
এসকিউএল সার্ভার 2016 দৃশ্যত এখনও তাদের সমর্থন করবে।
সঙ্গম

1
@ কনফ্লুয়েন্স Histতিহাসিকভাবে, এসকিউএল সার্ভারে তাদের অস্তিত্ব সম্পর্কিত যেহেতু টেক্সট এবং এনেক্সট পুরানো ডেটা টাইপ ভার্চার এবং এনভারচরের চেয়ে?
আরবিটি

আপনি WRITETEXT এবং UPDATETEXT ব্যবহার করবেন না। ২০১০ সালে হয়তো আপনি করেছেন! আরও তথ্যের জন্য আগ্রহী।
সাইমন_উইভার

38

VARCHAR(MAX)TEXTক্ষেত্র সামঞ্জস্য করার জন্য যথেষ্ট বড় । TEXT, NTEXTএবং IMAGEএসকিউএল সার্ভার 2000 এর ডেটা প্রকারগুলি এসকিউএল সার্ভারের ভবিষ্যতের সংস্করণে অবচিত করা হবে, এসকিউএল সার্ভার 2005 ডাটা প্রকারের ক্ষেত্রে পশ্চাদপদ সামঞ্জস্যতা সরবরাহ করে তবে এটি নতুন ডাটা প্রকারগুলি ব্যবহার করার জন্য প্রস্তাবিত VARCHAR(MAX), NVARCHAR(MAX)এবং VARBINARY(MAX)


32

ntextসর্বদা এটির একটি পৃথক ডাটাবেস পৃষ্ঠায় nvarchar(max)ডেটা সংরক্ষণ করবে , যখন ডাটাবেস রেকর্ডের মধ্যেই ডেটা সংরক্ষণ করার চেষ্টা করবে।

তাই nvarchar(max)কিছুটা দ্রুত (যদি আপনার কাছে 8 কেবি এর চেয়ে ছোট আকারের পাঠ্য থাকে)। আমি আরও লক্ষ্য করেছি যে ডাটাবেসের আকারটি কিছুটা ধীরে ধীরে বাড়বে, এটিও ভাল।

যাও nvarchar(max)


13

nvarchar(max)আপনি ব্যবহার করতে চান কি। সবচেয়ে বড় সুবিধা হ'ল আপনি এই ডেটা টাইপের সমস্ত টি-এসকিউএল স্ট্রিং ফাংশন ব্যবহার করতে পারেন। এটি দিয়ে সম্ভব নয় ntext। আমি কোন বাস্তব অসুবিধা সম্পর্কে অবগত নই।


আমি যা বুঝতে পারি না তা হ'ল তারা যেতে বলে nvarchar(max)তবে এটি আমাকে 4000 টি চরিত্রের মধ্যে সীমাবদ্ধ করে। আমি যদি এর চেয়ে বেশি ক্ষেত্র ধরে রাখতে চাই?
ভয়েডকিং

2
nvarchar (সর্বাধিক) আপনাকে 4000 টি অক্ষরের মধ্যে সীমাবদ্ধ করে না। আপনার কাছে সীমাহীন অক্ষর রয়েছে। এছাড়াও, এসকিউএল সার্ভার দ্বারা পাঠ্য এবং ntext অবচয় করা হয়েছে। এর অর্থ ভবিষ্যতের সংস্করণে এগুলি আর সমর্থিত হবে না।
র্যান্ডি মাইন্ডার

ওআইসি, আমি এসকিউএল সার্ভার সিই ব্যবহার করছি, যা আমার nvarchar(max)4000 টির মধ্যে সীমাবদ্ধ করে । সুতরাং এসকিউএল সার্ভার কমপ্যাক্টের জন্য আমার ntextকিছু ক্ষেত্রে ব্যবহার করা ছাড়া উপায় নেই । যখন তারা এটি বন্ধ করে দেয়, আমি মনে করি আমাকে কেবল কয়েকটি সাইট আপগ্রেড করতে হবে না।
ভয়েডকিং

1
@ র্যান্ডিমিন্ডার এনভারচার (সর্বাধিক) সীমাহীন স্টোরেজ নয়। এসকিউএল সার্ভারের ডকুমেন্টেশন অনুসারে "সর্বোচ্চটি নির্দেশ করে যে সর্বাধিক স্টোরেজ আকার 2 ^ 31-1 বাইট (2 গিগাবাইট) হয় The বাইটের মধ্যে সঞ্চয়স্থানের আকার, 2 বাইটে প্রবেশ করা তথ্যের প্রকৃত দৈর্ঘ্যের দ্বিগুণ।"
শিব


4

Text(একসাথে NTextএবং এর সাথে Image) এর বৃহত্তম অসুবিধা হ'ল এটি ডকুমেন্টেশন অনুসারে , এসকিউএল সার্ভারের ভবিষ্যতের সংস্করণে সরানো হবে । এটি কার্যকরভাবে আপনার স্কিমা আপগ্রেড করতে আরও শক্ত করে তুলবে যখন এসকিউএল সার্ভারের সেই সংস্করণ প্রকাশিত হবে।


3

রূপান্তর করার সাথে আমার অভিজ্ঞতা যুক্ত করতে চেয়েছিলেন। আমার textপ্রাচীন লিঙ্ক 2 এসকিউএল কোডে অনেকগুলি ক্ষেত্র ছিল । এটি textসূচীতে উপস্থিত কলামগুলি অনলাইনে পুনর্নির্মাণের অনুমতি দেওয়ার জন্য ছিল ।

প্রথমে আমি বছরের পর বছর ধরে সুবিধাগুলি সম্পর্কে জানতাম, তবে সর্বদা ধরে নিয়েছি যে রূপান্তরকরণের অর্থ কিছু ভীতিজনক দীর্ঘ প্রশ্নগুলি হবে যেখানে এসকিউএল সার্ভারকে টেবিলটি পুনরায় তৈরি করতে হবে এবং সমস্ত কিছু অনুলিপি করতে হবে, আমার ওয়েবসাইটগুলি নামিয়ে আনতে এবং আমার হৃদয় বাড়িয়ে তুলবে।

আমিও উদ্বিগ্ন ছিলাম যে লিনক 2 এসকিউএল যদি কলামের ধরণের যাবতীয় যাচাই করে থাকে তবে ত্রুটি ঘটতে পারে।

যদিও জানার জন্য খুশি, যে ALTER কমান্ডগুলি তাত্ক্ষণিকভাবে ফিরে এসেছে - সুতরাং তারা অবশ্যই টেবিল মেটাডেটা পরিবর্তন করছে। <8000 চরিত্রের ডেটাটি টেবিলটিতে ফিরিয়ে আনতে কিছু অফলাইন কাজ হতে পারে তবে ALTER কমান্ডটি তাত্ক্ষণিক ছিল।

রূপান্তরকরণের প্রয়োজনীয় সমস্ত কলামগুলি খুঁজতে আমি নীচে দৌড়েছি:

SELECT concat('ALTER TABLE dbo.[', table_name, '] ALTER COLUMN [', column_name, '] VARCHAR(MAX)'), table_name, column_name
FROM information_schema.columns where data_type = 'TEXT' order by table_name, column_name

SELECT concat('ALTER TABLE dbo.[', table_name, '] ALTER COLUMN [', column_name, '] NVARCHAR(MAX)'), table_name, column_name
FROM information_schema.columns where data_type = 'NTEXT' order by table_name, column_name

এটি আমাকে প্রশ্নের একটি দুর্দান্ত তালিকা দিয়েছে, যা আমি সদ্য নির্বাচন করে একটি নতুন উইন্ডোতে অনুলিপি করেছি। আমি যেমন বলেছিলাম - এটি চালানো তাত্ক্ষণিক ছিল।

এখানে চিত্র বর্ণনা লিখুন

লিনক 2 এসকিউএল বেশ প্রাচীন - এটি এমন একটি ডিজাইনার ব্যবহার করে যাতে আপনি টেবিলগুলি টানেন। ইএফ কোডের জন্য পরিস্থিতিটি প্রথমে আরও জটিল হতে পারে তবে আমি এখনও এটি মোকাবেলা করি নি।


1

আমি যুক্ত করতে চাই যে আপনি আংশিক বা সম্পূর্ণ আপডেটের জন্য ডাব্লুআইআরটি ক্লজটি ব্যবহার করতে পারেন এবং ডেটা টাইপগুলিতে উচ্চ পারফরম্যান্স সংযোজন করতে পারেন varchar(max)/nvarchar(max)

এখানে আপনি .WRITEধারা ব্যবহারের সম্পূর্ণ উদাহরণ খুঁজে পেতে পারেন ।

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