Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

फ्रीबीसीपी:यूनिकोड डेटा कॉलम के लिए विषम बाइट आकार है। सम बाइट आकार का होना चाहिए

अपडेट:यह समस्या स्पष्ट रूप से 2016-11-04 को जारी फ्रीटीडीएस v1.0.16 में तय की गई है।

मैं फ्रीटीडीएस v1.0.15 का उपयोग करके आपकी समस्या को पुन:पेश कर सकता हूं। यह निश्चित रूप से freebcp में एक बग जैसा दिखता है यह तब विफल हो जाता है जब किसी टेक्स्ट फ़ील्ड के अंतिम वर्ण में U+20xx प्रपत्र का यूनिकोड कोड बिंदु होता है . (कारण के बारे में मेरे निष्कर्ष को सही करने के लिए @srutzky को धन्यवाद।) जैसा कि आपने नोट किया, यह काम करता है ...

291054  Ţawī Rifā

... और यह विफल हो जाता है ...

291054  Ţawī Rifā‘

... लेकिन मैंने पाया कि यह भी काम करता है:

291054  Ţawī Rifā‘x

तो, आपकी इनपुट फ़ाइल के विरुद्ध एक स्क्रिप्ट चलाने के लिए एक बदसूरत कामकाज होगा जो प्रत्येक टेक्स्ट फ़ील्ड में कम-ऑर्डर गैर-स्पेस यूनिकोड वर्ण जोड़ देगा (उदाहरण के लिए, x जो U+0078 . है , जैसा कि ऊपर के अंतिम उदाहरण में है), freebcp . का उपयोग करें डेटा अपलोड करने के लिए, और फिर एक UPDATE चलाएं अतिरिक्त वर्ण को हटाने के लिए आयातित पंक्तियों के विरुद्ध कथन।

व्यक्तिगत रूप से, मैं लिनक्स के लिए फ्रीटीडीएस से माइक्रोसॉफ्ट के एसक्यूएल सर्वर ओडीबीसी ड्राइवर पर स्विच करने के इच्छुक हूं, जिसमें bcp शामिल है। और sqlcmd उपयोगिताएँ जब यहाँ वर्णित निर्देशों का उपयोग करके स्थापित की जाती हैं:

https://gallery.technet.microsoft.com /scriptcenter/SQLCMD-and-BCP-for-Ubuntu-c88a28cc

मैंने अभी Xubuntu 16.04 के तहत इसका परीक्षण किया है, और हालांकि मुझे libssl.so.1.0.0 का उपयोग करने के लिए प्रक्रिया में थोड़ा बदलाव करना पड़ा। के बजाय libssl.so.0.9.8 (और libcrypto . के लिए भी ऐसा ही है ), एक बार जब मैंने इसे स्थापित कर लिया तो bcp जहां freebcp . में Microsoft की उपयोगिता सफल हुई विफल।

यदि लिनक्स के लिए SQL सर्वर ODBC ड्राइवर मैक पर काम नहीं करेगा तो दूसरा विकल्प SQL सर्वर के लिए Microsoft JDBC ड्राइवर 6.0 और जावा कोड का एक छोटा सा उपयोग करना होगा, जैसे:

connectionUrl = "jdbc:sqlserver://servername:49242"
        + ";databaseName=myDb"
        + ";integratedSecurity=false";
String myUserid = "sa", myPassword = "whatever";

String dataFileSpec = "C:/Users/Gord/Desktop/bad.txt";
try (
        Connection conn = DriverManager.getConnection(connectionUrl, myUserid, myPassword);
        SQLServerBulkCSVFileRecord fileRecord = new SQLServerBulkCSVFileRecord(dataFileSpec, "UTF-8", "\t", false);
        SQLServerBulkCopy bulkCopy = new SQLServerBulkCopy(conn)) {
    fileRecord.addColumnMetadata(1, "col1", java.sql.Types.NVARCHAR, 50, 0);
    fileRecord.addColumnMetadata(2, "col2", java.sql.Types.NVARCHAR, 50, 0);
    bulkCopy.setDestinationTableName("dbo.freebcptest");
    bulkCopy.writeToServer(fileRecord);
} catch (Exception e) {
    e.printStackTrace(System.err);
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL में क्वेरी द्वारा समूह में गैर कुल कॉलम दिखा रहा है

  2. SQL को उच्चतम मान मिलता है और समाप्‍त हो जाता है

  3. Microsoft Access में एक निर्दिष्ट दिनांक सीमा के भीतर योग प्रदर्शित करना

  4. पैकेज पढ़ने और कोड से कार्य अनुक्रम निर्धारित करने के लिए एसएसआईएस एपीआई का उपयोग कैसे करें (प्राथमिकता प्रतिबंध)

  5. SQL सर्वर 2008:मेरे पास 1000 टेबल हैं, मुझे यह जानने की जरूरत है कि किस टेबल में डेटा है