سؤال

يمكنني استخدام Teradata وإخراج الاستعلام أدناه "Altlüd" عند التشغيل باستخدام عميل Teradata.

select name as name  from MYTABLE where selector=?

بينما ، أحصل على "Altl؟ D" كإخراج عندما أحاول تنفيذ الاستعلام باستخدام عميل Java (JDBC مع برامج تشغيل Teradata). أنا أستخدم "UTF-8" Charset وقد جربت أيضًا Charset اللاتينية بدون حظ.

لقد حاولت أيضا هذا لاستكشاف الأخطاء وإصلاحها.

while (rs.next()) {
 System.out.println(rs.getString(1));
 Reader rd = rs.getCharacterStream(1);
 int charr = rd.read();
 while (charr >= 0) {
    System.out.println(charr + " = " + ((char) charr));
    charr = rd.read();
 }
}

والإخراج هو

altl؟ dersdorf 65 = a 108 = l 116 = t 108 = l 65533 =؟ 100 = د

إذا نظرت إلى الإخراج المنتجة ، فإن قيمة int لحرف SPL هي 65533 والتي لا ينبغي أن تكون هي الحالة.

إنفاكت إرجاع 65533 لجميع الشخصيات الخاصة.

سيتم تقدير أي أدلة/مؤشرات. شكرًا!!!

هل كانت مفيدة؟

المحلول

يبدو أن حرف استبدال Unicode U+FFFD. لا يستخدم عميل وخادم JDBC نفس الترميز للأحرف. يبدو أن العميل يحاول UTF-8 ، لكن الخادم يقدم أي تنسيق غير UTF.

لا أعرف Teradata ، لكن يجب أن تبحث عن أي قاعدة بيانات أو إعدادات خادم للترميز و/أو اللغة.

نصائح أخرى

حاول استخدام charset = UTF-16 كمعلمة جانب العميل.

طريقة واحدة سهلة هي ضبط lc_all = lang = en_us.utf-16 ثم قم بتشغيل برنامج Java الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top