এসকিউএল সার্ভার ভর্কআরআর কলাম দিয়ে এনকোডিংয়ের সমস্যাটি পাইথনে পুনরুদ্ধার করা হয়েছে


10

এসকিউএল সার্ভারে বারচর (120) হিসাবে সংরক্ষণ করা হচ্ছে এমন একটি ক্ষেত্রের সাথে সম্পর্কিত এনকোডিং নিয়ে আমরা সম্প্রতি একটি সমস্যা পেয়েছি। এসএসএমএসে, বার্চারটি প্রদর্শিত হবে:

"জোনবেট কে মেরেছে?"

যাইহোক, যখন এটি অজগর মধ্যে আনা হয়, এটি প্রদর্শিত হবে:

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

আমি পাইথন দিক থেকে এটি গবেষণা করেছি এবং আজব কিছুই ঘটছে না। আমার তত্ত্বটি হ'ল এসকিউএল সার্ভারের বার্চারা ইউটিএফ -8 অক্ষর গ্রহণ করছে যা এসএসএমএসের চেয়ে অজগরটিতে আলাদাভাবে প্রদর্শিত হচ্ছে। আমি এসকিউএল সার্ভারে এনকোডিংয়ের সাথে খুব বেশি পরিচিত নই। কেউ কি দয়া করে আমাকে নিম্নলিখিতগুলি জানান:

  • ভার্সারের এনকোডিংটি দেখার জন্য কি এসএসএমএসে কোনও উপায় আছে? উদাহরণস্বরূপ বর্তমানে এসএসএমএস থেকে কমা প্রদর্শন করার পরিবর্তে 82 x82 দেখুন?
  • আমরা এসকিউএল সার্ভার ২০০৮ ব্যবহার করছি import আমদানি / রফতানি সরঞ্জামগুলি ব্যবহার না করে বা কোনও ফ্ল্যাট ফাইলে ডাম্পিং না করে কোনও ইউটিএফ -8 অক্ষরের এএসসিআইআই অক্ষরে এনকোডিং পরিবর্তন করার কোনও উপায় আছে কি? আমি কি কোনও প্রশ্নের মাধ্যমে এই রূপান্তর করতে পারি?
  • প্রোগ্রামিয়ালি কোন ক্যোয়ারির মাধ্যমে সমস্যাযুক্ত রেকর্ডগুলি সনাক্ত করার কোনও উপায় আছে (ইউএসএফ -8 অক্ষর যা ASCII- র মাধ্যমে সমর্থিত নয়) হিসাবে সংজ্ঞায়িত হচ্ছে?

তুমাকে অগ্রিম ধন্যবাদ!

ব্যবহার sp_help N'table_name';আমি দেখেছি এই কোলেশন যে VARCHARকলাম হল: SQL_Latin1_General_CP1_CI_AS


কোলেশনটি কীভাবে এই VARCHARকলামটি ব্যবহার করছে?
সলোমন রুটজকি

@ সলোমনরুতজকি কীভাবে আপনার কোলেশন চেক করবেন। এর অর্থ কী তা আমি নিশ্চিত নই
এরিক

দ্রুততম উপায়ে আমি মনে করি হল: sp_help N'table_name';। "নাম" এর উপর ভিত্তি করে কলামটি দেখুন এবং তারপরে "কোলেশন_নাম" কলামটি দেখুন।
সলোমন রুটজকি

@ সলোমনরুতজকি সেই ক্ষেত্রটির জোটটি হ'ল 'এসকিউএল_ল্যাটিন 1_ জেনারাল_সিপি 1_সিআই_এএস'
এরিক

উত্তর:


17

এসকিউএল সার্ভার কোনও পরিস্থিতিতে ইউটিএফ -8 সঞ্চয় করে না। আপনি (ইউটিএফ -16 লিটল এন্ডিয়ান (এলই)) এর মাধ্যমে পাবেন NVARCHAR(সহ NCHARএবং NTEXTতবে কখনও ব্যবহার করেন না NTEXT) এবং XML, বা একটি কোড পৃষ্ঠার উপর ভিত্তি করে কিছু 8-বিট এনকোডিং VARCHAR(এর সাথে CHARএবং TEXTতবে কখনও ব্যবহার করবেন না TEXT) ।

এখানে সমস্যাটি হ'ল এটি আপনার ইউটিএফ -8, ভেবে ভেবে আপনার কোডটি 0x82 অক্ষরটির ভুল ব্যাখ্যা করে। 0x82 এর মান আছে এমন কোনও ইউটিএফ -8 "অক্ষর" নেই, যার কারণে আপনি "unknown" এর "অজানা" / প্রতিস্থাপন প্রতীক পাবেন। দয়া করে নীচের UTF-8 টেবিলটি দেখুন যা দেখায় যে 0x82 এর একক-বাইটের জন্য কোনও অক্ষর নেই:

ইউটিএফ -8 এনকোডিং টেবিল

ওপি কর্তৃক বর্ণিত হিসাবে, প্রশ্নের মধ্যে থাকা কলামটির সমষ্টি SQL_Latin1_General_CP1_CI_AS, যার অর্থ 8-বিট এনকোডিং কোড পৃষ্ঠা 1252 ব্যবহার করছে যা উইন্ডোজ ল্যাটিন 1 (এএনএসআই) । এবং সেই চার্টটি পরীক্ষা করা (অক্ষরের নাম রয়েছে বলে নীচের চার্টে নীচে স্ক্রোল করুন) মান 0x82 ("কোড পয়েন্ট" কলামে "82" দেখুন) আসলে এসএসএমএসে আপনি দেখতে পাচ্ছেন এমন একক নিম্ন -9 উদ্ধৃতি চিহ্ন । যে চরিত্র, হল UTF-8, একটি 3 বাইট ক্রম: E2 80 9A

এর মানে কি সব হ'ল: CODE পৃষ্ঠা 1252 থেকে SQL সার্ভার সংযোগের জন্য ক্লায়েন্ট-এনকোডিং পারেন সেট করার জন্য আপনার পাইথন কোড চাহিদা, অথবা আপনি / পরিবর্তন করতে হবে ফিরে স্ট্রিং এর এনকোডিং রূপান্তর থেকে কোড পৃষ্ঠা 1252 থেকে হল UTF-8।

অবশ্যই, যদি এই একটি ওয়েব পৃষ্ঠায় প্রদর্শিত হচ্ছে, তাহলে আপনি পারে পৃষ্ঠা হতে এর ঘোষিত অক্ষরসেট পরিবর্তন Windows-1252, কিন্তু যে পৃষ্ঠায় অন্যান্য অক্ষর হস্তক্ষেপ পারে যদি সেখানে হল UTF-8 অক্ষর ইতিমধ্যে সেখানে।


ভাল, এটি খুব সহায়ক, ধন্যবাদ সলোমন। দয়া করে ভুল ব্যাখ্যা সম্পর্কে আমাকে জানান about এটি একটি খুব জটিল সমস্যা এবং এটি দিয়ে কোথা থেকে শুরু করব তাও আমি নিশ্চিত নই।
এরিক

বাহ, আশ্চর্যজনক বিস্তারিত, @ সলোমন! আমি এখানে একটি পৃথক পাইথন + এমএস এসকিউএল সমস্যা খুঁজছিলাম, তবে পড়া চালিয়ে যাচ্ছি কারণ আমি অনেক কিছু শিখছিলাম। :
মাইক উইলিয়ামসন

1
@ মাইকউইলিয়ামসন যে প্রশংসা ভাগ করে নেওয়ার জন্য ধন্যবাদ :)। আপনি নিম্নলিখিত আগ্রহী হতে পারে: C # এর .NET MD5 থেকে TSQL MD5 হ্যাশ বিভিন্ন (ইত্যাদি), কিভাবে স্ট্রিপ হিব্রু উচ্চারণভঙ্গি মার্কস (DBA.SE এখানে), এবং Collations.Info । উপভোগ করুন!
সলোমন রুটজকি

ধন্যবাদ! আমার সন্দেহ হয় যে লাতিন-ভিত্তিক কোনও ভাষা নিয়ে কাজ করা যে কেউ এই বিষয়টিকে আমাদের / ইউকেতে সুখীভাবে কাজ করার চেয়ে অনেক ভাল জানেন । :)
মাইক উইলিয়ামসন

1
কেবলমাত্র একটি দ্রষ্টব্য: এমএস এসকিউএল সার্ভার 2019 ইউটিএফ -8 এর জন্য ভিআরএআচআর / সিএইচআর ডেটাটাইপগুলিতে স্থানীয় সমর্থন প্রবর্তন করেছে।
গ্রেগরি অ্যারেনিয়াস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.