MSSQL と Sqlite データベースを比較する小さなアプリを Python 2.7 で作成しましたが、バイナリ データ型 ( binary
、varbinary
、image
など) に問題があります。サーバー側には、データをモバイル デバイスに送信する C# で記述されたアプリケーションがありますが、最初にバイナリ型を 16 進数に変換します。
例えば:
データベースには、データ型の列があり、次のbinary(50)
ような情報が格納されます。
0x81B5ED7992000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
C# アプリは、次のコードでそれを 16 進数に変換します。
var sb = new StringBuilder();
sb.Append("'");
byte[] data = Encoding.UTF8.GetBytes(value.ToString());
foreach (byte b in data)
{
sb.Append(string.Format("{0:x2}", b));
}
sb.Append("'");
valuesStringBuilder.Append(sb.ToString());
変数には次のデータが含まれます。
value
{byte[50]}
[0]: 129
[1]: 181
[2]: 237
[3]: 121
[4]: 146
[5]: 0
[6]: 0
[7]: 0
[8]: 0
[9]: 0
[10]: 0
[11]: 0
[12]: 0
[13]: 0
[14]: 0
[15]: 0
[16]: 0
[17]: 0
[18]: 0
[19]: 0
[20]: 0
[21]: 0
[22]: 0
[23]: 0
[24]: 0
[25]: 0
[26]: 0
[27]: 0
[28]: 0
[29]: 0
[30]: 0
[31]: 0
[32]: 0
[33]: 0
[34]: 0
[35]: 0
[36]: 0
[37]: 0
[38]: 0
[39]: 0
[40]: 0
[41]: 0
[42]: 0
[43]: 0
[44]: 0
[45]: 0
[46]: 0
[47]: 0
[48]: 0
[49]: 0
value.ToString()
"System.Byte[]"
data
{byte[13]}
[0]: 83
[1]: 121
[2]: 115
[3]: 116
[4]: 101
[5]: 109
[6]: 46
[7]: 66
[8]: 121
[9]: 116
[10]: 101
[11]: 91
[12]: 93
sb
{'53797374656d2e427974655b5d'}
Capacity: 32
Length: 28
MaxCapacity: 2147483647
私のpythonアプリでは、pyodbcライブラリを使用しています。MSSQL データベースから、データを bytearray として取得します。
bytearray(b'\x81\xb5\xedy\x92\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
Sqlite データベースから、Unicode 文字列として読み取ることができます。
u'53797374656d2e427974655b5d'
したがって、それらを比較するには、そのバイト配列をユニコード文字列とまったく同じ形式に変換する必要があります。Stackoverflow で解決策を見つけようとしましたが、予想とはまったく異なる文字列が常に得られます。
どうすればこれができるか知っている人はいますか?