求助:如何能将存储为varbinary格式的字符串转为varchar存储

vivianawoo 2010-05-26 10:16:51
如何能将在库表里已经存储为varbinary格式的中文字符串,转换回varchar形式存储。
比如表中以二进制方式存储了一些用户名。现在希望将这些用户名转换回中文以varchar形式存储。
SQL SERBER能否实现?
...全文
533 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Garnett_KG 2010-05-27
  • 打赏
  • 举报
回复
你的0x000001000100000000000000000022000000FFFFFFFF22002857094E004E944E6567344E4B4E45960CFFA6684B4EFD903F62A74EC

这怎么存进去的?

10楼已经说的很清楚,如果是UNICODE的话,转出来的binary不可能有0000
vivianawoo 2010-05-27
  • 打赏
  • 举报
回复
这个字段确实存储的是中文字符,再给个例子吧,我只想确认SQL SERVER能否有办法把存储为varbinary格式的中文字符转换回varchar。
例如:0x000001000100000000000000000022000000FFFFFFFF22002857094E004E944E6567344E4B4E45960CFFA6684B4EFD903F62A74EC696E2565E97385EEF79816730572E5EA952604F8C5B10620F5C4B5C84764753A77EE55D5C4F0230
中文信息对应的是:在三-五来临之际,梦之都房产集团非常积极的帮助人完成小屋的升级工作。

高手们不要回答既然已经知道了中文意思,还询问为什么要想办法转换。我只想确认除了自己写函数转之外,SQL SERVER能否有方法转换回去吗。谢谢啦~。~
vivianawoo 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 feilniu 的回复:]
引用 7 楼 vivianawoo 的回复:

字段格式是varbinary(MAX),里边存储的是一段中文信息。
例如存储如下:0x000001000600000000000000000014000000FFFFFFFF020C000000584E0000CB00000068010000021400000003000000A44661FF00001700000002000000FFFFFF……
[/Quote]

ucs-2,该字段里存储的确实是中文信息。
feilniu 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 vivianawoo 的回复:]

字段格式是varbinary(MAX),里边存储的是一段中文信息。
例如存储如下:0x000001000600000000000000000014000000FFFFFFFF020C000000584E0000CB00000068010000021400000003000000A44661FF00001700000002000000FFFFFFFF0000190000006000000050F……
[/Quote]
看着不像是中文信息。
还是那句话:这个二进制数据是怎么来的?是什么字符编码?
vivianawoo 2010-05-26
  • 打赏
  • 举报
回复
字段格式是varbinary(MAX),里边存储的是一段中文信息。
例如存储如下:0x000001000600000000000000000014000000FFFFFFFF020C000000584E0000CB00000068010000021400000003000000A44661FF00001700000002000000FFFFFFFF0000190000006000000050FF00FF020C000000434E000041010000EF000000027900000006000000A44661FF00007F0000000400000050FF00FF8300065CB65BED562D4E84760F5C4B5C475330523200A77E0CFF36710E546C8F4A54A6684B4EFD90847606666D51594F02300A00D0633A791AFF0A00310001302857009781894753A77E8476FA5E517B0A4EB970FB51F3532E950CFF0990E9621C204753A77E1D200CFF8D5109902D4E4753A77E0E548476FA5E517B37680F5F0CFFB970FB511C206E78A48B1D207353EF5302300A0032000130FA5E517B4753A77E00978189F876945E8476FA5E517BFE56B87E0130B38D1F598476D191015E0CFF144E00978189004E9A5B84764753A77EF665F49502300A00330001307651835BFA5E517BFE56B87EEF532857A6684B4EFD90B65BED56C58870994655BA4E04592D8D704E0230

如何转换?
feilniu 2010-05-26
  • 打赏
  • 举报
回复
似乎数据库的排序规则必须是Chinese_PRC打头的,才能支持GBK编码的varbinary到varchar的自动转换。

SELECT * FROM fn_helpcollations()
WHERE name LIKE 'Chinese[_]PRC%'

feilniu 2010-05-26
  • 打赏
  • 举报
回复
要看楼主你的varbinary格式的中文字符串是什么字符编码。
如果是Unicode(ucs-2)或GBK(cp936),可以用以下方式直接转;如果是UTF-8,那就需要自己写函数来转了。


--假如数据库默认排序规则是COLLATE Chinese_PRC_CI_AS
SELECT
UCS_2 = CAST(N'中文' AS binary(4)),
CP936 = CAST( '中文' AS binary(4))
GO
SELECT
UCS_2 = CAST(0x2D4E8765 AS nchar(2)),
CP936 = CAST(0xD6D0CEC4 AS char(4))
GO


参看:http://blog.csdn.net/feilniu/archive/2010/05/25/5623313.aspx
Garnett_KG 2010-05-26
  • 打赏
  • 举报
回复
比如我不知道沟沟的COLLATE是什么,

我的DB COLLATE是SQL_Latin1_General_CP1_CI_AI,我执行他的代码后结果是

select convert(varchar(10),0xA7DAAC4FA448)
/*
§Ú¬O¤H
*/
Garnett_KG 2010-05-26
  • 打赏
  • 举报
回复
在没有变更数据库COLLATE的情况下可以直接转换。

playwarcraft 2010-05-26
  • 打赏
  • 举报
回复

select convert(varchar(10),0xA7DAAC4FA448)
/*
我是人
*/
playwarcraft 2010-05-26
  • 打赏
  • 举报
回复
直接 convert(varchar, 0x....) 就可以了吧
feilniu 2010-05-26
  • 打赏
  • 举报
回复
中文字符在ucs-2中应该是从U+4E00(一)到U+9FA5(龥),高字节只能是4E到9F,不可能出现长串的0000。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧