将 Uint8List 存储到 SQL 服务器
Storing Uint8List into SQL Server
我正在使用 Flutter,我正在研究从图库中获取图片列表并将它们转换为 List<Uint8List>
以将它们存储在 SQL 服务器数据库中的功能。
我对存储每个 Uint8List
数据的正确数据类型有疑问。
当我使用其他语言的 byte[]
时,我使用 varbinary(MAX)
存储数据,它看起来像这样:
0x89504E470D0A1A0A0000000D49484452000000380000004A080400000044655F5F0000016A49444154785EEDDA3F6AC33014C0E1DA2DC42521B3C76CB940F65CA2BD434ED06EED0172852CD93364EED05E2174CA0D32650A34E03FFA55E60D6F2826B5239B52DE7B48605BF2C7434618EC9B1E024D39EC33F80FA081E1C340030D34D040030D34D040460C48B86F980903468D4122DF5EC938F1D5304F64BCC81D1A81C40C58D326D624C4CD40212312B640F
现在 List<Uint8List>
每个文件的数据如下所示:
[255, 216, 255, 225, 1, 182, 69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 7, 1, 16, 0, 2, 0, 0, 0, 26, 0, 0, 0, 98, 1, 0, 0, 4, 0, 0, 0, 1, 0, 0, 3, 192, 1, 1, 0, 4, 0, 0, 0, 1, 0, 0, 5, 0, 1, 50, 0, 2, 0, 0, 0, 20, 0, 0, 0, 124, 1, 18, 0, 3, 0, 0, 0, 1, 0, 1, 0, 0, 135, 105, 0, 4, 0, 0, 0, 1, 0, 0, 0, 152, 1, 15, 0, 2, 0, 0, 0, 8, 0, 0, 0, 144, 0, 0, 0, 0, 65, 110, 100, 114, 111, 105, 100, 32, 83, 68, 75, 32, 98, 117, 105, 108, 116, 32, 102, 111, 114, 32, 120, 56, 54, 0, 63, 63, 63, 63, 58, 63, 63, 58, 63, 63, 32, 63, 63, 58, 63, 63, 58, 63, 63, 0, 117, 110, 107, 110, 111, 119, 110, 0, 0, 16, 130, 157, 0, 5, 0, 0, 0, 1, 0, 0, 1, 94, 130, 154, 0, 5, 0, 0, 0, 1, 0, 0, 1, 102, 146, 146, 0, 2, 0, 0, 0, 4, 63, 63, 63, 0, 146, 145, 0, 2, 0, 0, 0, 4, 63, 63, 63, 0, 146, 144, 0, 2, 0, 0, 0, 4, 63, 63, 63, 0, 146, 10, 0, 5, 0, 0, 0, 1, 0, 0, 1, 110, 146, 9, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 136, 39, 0, 3, 0, 0, 0, 1, 0, 100, 0, 0, 144, 4, 0, 2, 0, 0, 0, 20, 0, 0, 1, 118, 144, 3, 0, 2, 0, 0, 0, 20, 0
所以我很困惑如何存储这些数据以及我应该在 SQl 服务器中使用什么数据类型。
提前致谢。
SQL 服务器没有直接映射到列表的数据类型,因此正确的选择可能取决于您打算如何使用列表值。
部分选项:
- 创建一个新的 table 并将每个列表值连同将其关联回主 table 的键值存储在单独的行中。通过这种方式,您可以轻松地直接单独处理所有值,并将值定义为
INT
,但需要权衡额外的 table 并确保正确关联这些值。
(N)VARCHAR(MAX)
- 将它们存储为字符值允许您将列表存储为 '[255, 216, 255, 225, 1, 182, 69, 120, 105, 102, 0, 0, 77 , 77, 0, 42]'。这会将列表分隔符和括号作为边界,然后让您将其读回您的代码。但是,需要考虑 INT
和 CHAR
数据类型之间的转换。如果您需要处理列表的值,则需要使用 STRING_SPLIT
将列表转换为 table,然后进一步 CAST
/CONVERT
数据类型从 CHAR
回到 INT
.
- JSON - 您还可以将列表处理成 JSON 格式,然后再次将其存储在
VARCHAR(MAX)
列中。好处是您可以使用 SQL 服务器中的 JSON 函数来处理列表项。
希望对您有所帮助
我正在使用 Flutter,我正在研究从图库中获取图片列表并将它们转换为 List<Uint8List>
以将它们存储在 SQL 服务器数据库中的功能。
我对存储每个 Uint8List
数据的正确数据类型有疑问。
当我使用其他语言的 byte[]
时,我使用 varbinary(MAX)
存储数据,它看起来像这样:
0x89504E470D0A1A0A0000000D49484452000000380000004A080400000044655F5F0000016A49444154785EEDDA3F6AC33014C0E1DA2DC42521B3C76CB940F65CA2BD434ED06EED0172852CD93364EED05E2174CA0D32650A34E03FFA55E60D6F2826B5239B52DE7B48605BF2C7434618EC9B1E024D39EC33F80FA081E1C340030D34D040030D34D040460C48B86F980903468D4122DF5EC938F1D5304F64BCC81D1A81C40C58D326D624C4CD40212312B640F
现在 List<Uint8List>
每个文件的数据如下所示:
[255, 216, 255, 225, 1, 182, 69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 7, 1, 16, 0, 2, 0, 0, 0, 26, 0, 0, 0, 98, 1, 0, 0, 4, 0, 0, 0, 1, 0, 0, 3, 192, 1, 1, 0, 4, 0, 0, 0, 1, 0, 0, 5, 0, 1, 50, 0, 2, 0, 0, 0, 20, 0, 0, 0, 124, 1, 18, 0, 3, 0, 0, 0, 1, 0, 1, 0, 0, 135, 105, 0, 4, 0, 0, 0, 1, 0, 0, 0, 152, 1, 15, 0, 2, 0, 0, 0, 8, 0, 0, 0, 144, 0, 0, 0, 0, 65, 110, 100, 114, 111, 105, 100, 32, 83, 68, 75, 32, 98, 117, 105, 108, 116, 32, 102, 111, 114, 32, 120, 56, 54, 0, 63, 63, 63, 63, 58, 63, 63, 58, 63, 63, 32, 63, 63, 58, 63, 63, 58, 63, 63, 0, 117, 110, 107, 110, 111, 119, 110, 0, 0, 16, 130, 157, 0, 5, 0, 0, 0, 1, 0, 0, 1, 94, 130, 154, 0, 5, 0, 0, 0, 1, 0, 0, 1, 102, 146, 146, 0, 2, 0, 0, 0, 4, 63, 63, 63, 0, 146, 145, 0, 2, 0, 0, 0, 4, 63, 63, 63, 0, 146, 144, 0, 2, 0, 0, 0, 4, 63, 63, 63, 0, 146, 10, 0, 5, 0, 0, 0, 1, 0, 0, 1, 110, 146, 9, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 136, 39, 0, 3, 0, 0, 0, 1, 0, 100, 0, 0, 144, 4, 0, 2, 0, 0, 0, 20, 0, 0, 1, 118, 144, 3, 0, 2, 0, 0, 0, 20, 0
所以我很困惑如何存储这些数据以及我应该在 SQl 服务器中使用什么数据类型。
提前致谢。
SQL 服务器没有直接映射到列表的数据类型,因此正确的选择可能取决于您打算如何使用列表值。
部分选项:
- 创建一个新的 table 并将每个列表值连同将其关联回主 table 的键值存储在单独的行中。通过这种方式,您可以轻松地直接单独处理所有值,并将值定义为
INT
,但需要权衡额外的 table 并确保正确关联这些值。 (N)VARCHAR(MAX)
- 将它们存储为字符值允许您将列表存储为 '[255, 216, 255, 225, 1, 182, 69, 120, 105, 102, 0, 0, 77 , 77, 0, 42]'。这会将列表分隔符和括号作为边界,然后让您将其读回您的代码。但是,需要考虑INT
和CHAR
数据类型之间的转换。如果您需要处理列表的值,则需要使用STRING_SPLIT
将列表转换为 table,然后进一步CAST
/CONVERT
数据类型从CHAR
回到INT
.- JSON - 您还可以将列表处理成 JSON 格式,然后再次将其存储在
VARCHAR(MAX)
列中。好处是您可以使用 SQL 服务器中的 JSON 函数来处理列表项。
希望对您有所帮助