আমি বিশ্বাস করি এটি শেল এবং বিসিপি / এসকিউএল সার্ভারের মধ্যে একটি এনকোডিং সমস্যা । এসকিউএল সার্ভার ইউটিএফ -16 লিটল এন্ডিয়ান আশা করে, তবে লিনাক্স এটি ব্যবহার করছে না। আমার লিনাক্স VM- র জন্য ডিফল্ট মাধ্যমে হল UTF-8 en_GB.UTF-8
।
<টি এল; ডিআর> ব্যবহার "queryout" BCP কমান্ড উল্লেখ "SELECT * FROM ..."
পরিবর্তে "আউট" কমান্ড ব্যবহার করে এবং কেবল একটি সারণী নাম সরবরাহ।
এরপরে আমার পরীক্ষাটি হ'ল ...
আমি ব্যবহার করে উপলব্ধ লোকেল / এনকোডিংগুলির তালিকা পেয়েছি:
$ locale -a
ফিরে
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
POSIX
আমি সেট করে এই বিকল্পগুলির বেশ কয়েকটি চেষ্টা করেছি:
$ export LC_CTYPE=C.UTF-8
এবং তারপরে আবার চেষ্টা করে:
$ export LC_ALL=C.UTF-8
কিছুই মনে হয় না পার্থক্য আছে। এবং প্রতিবার আমি স্কোয়ার বন্ধনীগুলির বিভিন্ন সংমিশ্রণগুলি ছাড়াই -q
এবং তারপরে চেষ্টা করেছি -q
এবং তারপরে এবং বাইরে কোনও বর্গাকার বন্ধনী নেই -q
।
এমনকি আমি বাইটগুলি ইনজেকশনের চেষ্টা করেছি যা ইউটিএফ -16 এলই চরিত্রের ä
মাধ্যমে $'\xe4\x00'
এবং এমনকি এর সমতুল্য হবে $'\xe4'$'\x00'
তবে কোনও উন্নতি হয়নি।
যাহোক,
কি করেনি কাজ পরিবর্তন হয়েছিল BCP থেকে কমান্ড out
পরিবর্তে হতে queryout
, এবং তারপর পরিবর্তন সারণী নাম একটি অংশ হতে SELECT
বিবৃতি (আমি মুছে -r ~
সুইচ শুধুমাত্র এখানে নেই স্ক্রল অনুভূমিকভাবে কমান্ড লাইন করতে, কিন্তু এটা আমার পরীক্ষার মধ্যে ছিল না)। আমি টেবিলটি তৈরি করেছি [tempdb]
এবং নিম্নলিখিতগুলি চালিত করেছি:
bcp "SELECT * FROM tempdb.dbo.[Täble_Name]" queryout tab -c -k -S127.0.0.1 -Usa -Ppass
সমস্যা নেই। তবে আকর্ষণীয়ভাবে যথেষ্ট, আমি উচ্চারণকৃতকে ä
একটি অ-উচ্চারণে পরিবর্তন করেছি a
:
bcp "SELECT * FROM tempdb.dbo.[Table_Name]" queryout tab -c -k -S127.0.0.1 -Usa -Ppass
এবং নিম্নলিখিত ত্রুটি পেয়েছি:
এসকিউএলস্টেট = এস 1000, নেটিভেরর = 0
ত্রুটি = [মাইক্রোসফ্ট] [এসকিউএল সার্ভারের জন্য ওডিবিসি ড্রাইভার 13] কলাম স্তর স্তরের কোলিশন সমাধান করতে অক্ষম
এটি বিসিপি থেকে একটি ত্রুটি tempdb
এবং আমার পরীক্ষার টেবিলে কেবলমাত্র কলামটি INT
ডেটাটাইপ ব্যবহার করার কারণে অবশ্যই তার মেটা-ডেটা উল্লেখ করা উচিত ।
এখন, আমার উদাহরণ স্তরের কোলেশনটি অ্যাকসেন্ট-সংবেদনশীল, তাই আমি অ-উচ্চারণের a
কাজটি করার আশা করছিলাম না (যদিও আমি "অবৈধ অবজেক্ট" ত্রুটিটি আশা করেছিলাম)। সুতরাং, অ্যাকসেন্ট-সংবেদনশীলতা পরীক্ষা করার জন্য, আমি একটি কলেজের সাথে একটি নতুন ডাটাবেস Latin1_General_100_CI_AI_KS_WS_CS
তৈরি করেছি, নতুন ডিবিতে একই টেবিলটি তৈরি করেছি এবং কয়েকটি সারি যুক্ত করেছি। আমি তখন নিম্নলিখিত দুটি পরীক্ষা চালিয়েছি:
bcp "SELECT * FROM ImportTest.dbo.[Täble_Name]" queryout tab -c -k -S127.0.0.1 -Usa -Ppass
bcp "SELECT * FROM ImportTest.dbo.[Table_Name]" queryout tab -c -k -S127.0.0.1 -Usa -Ppass
এবং দুজনেই কাজ করেছেন!
প্রাথমিক ফিরে যাওয়া BCP মাত্র একটি ক্যোয়ারী পরিবর্তে সারণী নাম উল্লেখ নির্দেশে, আমি পেতে সক্ষম ছিল ImportTest.dbo.[Table_Name]
এবং ImportTest.dbo.Table_Name
কাজ। তবে, আমি এখনও ImportTest.dbo.[Täble_Name]
কাজের কোনও সংমিশ্রণ পেতে সক্ষম হইনি ; সমস্ত রূপগুলি আগের মতো একই ত্রুটি পেয়েছে।