ما هو الفرق بين التحول إلى عرافة على الطرف العميل واستخدام RAWTOHEX؟

StackOverflow https://stackoverflow.com/questions/1034068

سؤال

ولدي الجدول الذي تم إنشاؤه من هذا القبيل:

CREATE TABLE bin_test
(id INTEGER PRIMARY KEY, b BLOB)

وعن طريق بيثون وcx_Oracle، إذا كنت تفعل هذا:

value = "\xff\x00\xff\x00" #The string represented in hex by ff00ff00
self.connection.execute("INSERT INTO bin_test (b) VALUES (rawtohex(?))",
                        (value,))
self.connection.execute("SELECT b FROM bin_test")

وأنا في نهاية المطاف في نهاية المطاف مع قيمة عرافة من a000a000، الذي غير صحيح! ولكن إذا كنت تفعل هذا:

import binascii
value = "\xff\x00\xff\x00"
self.connection.execute("INSERT INTO bin_test (b) VALUES (?)",
                        (binascii.hexlify(value,)))
self.connection.execute("SELECT b FROM bin_test")

وأحصل على النتيجة الصحيحة. لدي نظام نوع التحويل هنا، ولكن من الصعب بعض الشيء لوصف ذلك هنا. وهكذا، يمكن للشخص لي نقطة في الاتجاه الصحيح ما إذا أنا أفعل شيئا خاطئا على مستوى SQL أو ما إذا كان شيء غريب يحدث مع التحويلات الخاصة بي؟

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

المحلول

وRAWTOHEX () للتحويل أنواع البيانات أوراكل RAW إلى عرافة السلاسل. فمن الممكن يحصل الخلط من قبلك تمرير فإنه سلسلة، حتى إذا كانت السلسلة تحتوي على البيانات الثنائية. في هذه الحالة، منذ أوراكل تتوقع سلسلة من الأحرف عرافة، وإعطائها سلسلة من الأحرف عرافة.

نصائح أخرى

وRAWTOHEX في Oracle هو أمر حساس بعض الشيء، في حين على جهازك انها بالطبع حساس.

لاحظ أيضا أنه حجة لRAWTOHEX() يمكن تحويلها ضمنيا إلى VARCHAR2 من مكتبتك (ط. ه. المنقولة كما SQLT_STR)، الأمر الذي يجعل من الترميز أيضا والترتيب حساسة.

وأنا عادة تعيين نوع مناسب من الارتباطات متغير خاصة عندما تحاول تمرير أوراكل كيندا من نوع بيانات RAW إلى استعلام.

وعلى سبيل المثال شيئا مثل:

self.connection.setinputsizes(cx_Oracle.BINARY)
self.connection.execute(
    "INSERT INTO bin_test (b) VALUES (rawtohex(?))",
    (value,)
)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top