在SQL中,uniqueidentifier变成了小写字母,在C#中。

11
我在SQL中有一个存储GUID的列(uniqueidentifier)。我发现它是大写的。但是当通过存储过程返回数据到C#代码时,它变成了小写。
我在数据访问中使用实体框架。这可能是什么原因,我能避免这种转换吗?

唯一标识符不区分大小写。您有遇到任何问题吗? - Alexander
我知道uniqueidentifier不区分大小写。当我选择数据时,我看到它是大写的。我的代码使用者遇到了一些问题,因为存储过程返回小写字母,并且在某些其他调用中,他得到的数据是大写的。那么转换是在哪里发生的呢? - ravi shanker
2
SQL Server中的uniqueidentifier在.NET中被称为GUIDGUID只是一个数字,格式化为十六进制值,并添加了一些破折号以便于阅读。如果您正在使用GUID类型,则abc12ABC12完全相同。如果您将其转换为字符串,然后在C#中执行一些操作,则应该停止这样做-这不是它的预期用法。 - Jarek
如果在密码哈希盐中使用uniqueidentity,大小写敏感可能很重要。 - dragonfly02
2个回答

10
如果您使用Entity Framework,则 uniqueidentifier 数据将转换为Guid。

  

以指定格式表示的此Guid值,表示为一系列小写十六进制数字。

如果需要在应用程序中保持一致性,可以在从Guid获取字符串时使用一个格式。

查看 Guid.ToString方法(字符串)获取可用格式。

有可能会出现从数据库获取guid作为字符串的情况,因此会无限制地使用大写字母。(检查存储过程、视图等...)

为了避免这个问题,您必须确保返回 uniqueidentifier 本身,不要转换为varchar,并且在转换为字符串时遵循一个标准格式。

对于其他操作,例如比较等,您可以使用Guid运算符。


“确保将GUID作为唯一标识符返回”是什么意思?在数据字典中,它是唯一标识符。 - ravi shanker
你可能有一些在数据库层面将uniqueidentifier转换为varchar并返回到程序中的地方。如果你不将它转换为小写,那么就会出现这个问题。 - Damith
6
为什么在C#中 Guid.NewGuid().ToString() 返回小写字符串,在SQL server中 SELECT NEWID() 返回大写字符串? - Timeless

3
我猜测SQL Server将唯一标识符存储为128位整数,然后转换为十六进制进行显示。正如Alexander所说的那样,它无论以大写或小写形式显示十六进制值都没有关系,因为它们代表同样的东西。
如果对您的应用程序很重要,那么您可以在C#中将其转换为大写,而不会有任何问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接