为什么postgres将字符串分配给字符串?

时间:2016-11-15 23:42:33

标签: sql postgresql select distinct

如果执行services.AddSingleton <IValidationAttributeAdapterProvider, CustomValidationAttributeAdapterProvider> (); ,输出将是两列,第一列是未知数据类型,第二列是数据类型为整数。

如果执行using System; using System.ComponentModel.DataAnnotations; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using Microsoft.Extensions.Localization; using Microsoft.AspNetCore.Mvc.DataAnnotations.Internal; public class MyRequiredAttributeAdaptor : AttributeAdapterBase<RequiredAttribute> { public MyRequiredAttributeAdaptor(RequiredAttribute attribute, IStringLocalizer stringLocalizer) : base(attribute, stringLocalizer) { } public override void AddValidation(ClientModelValidationContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } MergeAttribute(context.Attributes, "data-val", "true"); MergeAttribute(context.Attributes, "data-val-required", GetErrorMessage(context)); } /// <inheritdoc /> public override string GetErrorMessage(ModelValidationContextBase validationContext) { if (validationContext == null) { throw new ArgumentNullException(nameof(validationContext)); } return GetErrorMessage(validationContext.ModelMetadata, validationContext.ModelMetadata.GetDisplayName()); } } ,输出将是两列,第一列的数据类型为文本,第二列的数据类型为整数。

为什么添加MinLengthSixAttribute功能与运行没有SELECT 'test', 123的查询的数据类型有什么不同?

1 个答案:

答案 0 :(得分:8)

Chapter 10. Type Conversion中描述了此行为。

10.1. Overview中,您可以找到:

  

如果没有为字符串文字指定类型,则最初会分配占位符类型unknown,以便在以后阶段解决。

要选择不同的值,Postgres必须将字符串文字转换为具有相等运算符的类型。案件类似于工会:

select 'abc', 1
union
select 'def', 1

其中第一列被解析为text。该规则在10.5. UNION, CASE, and Related Constructs中描述:

  
      
  1. 如果所有输入都是未知类型,请解析为类型文本(字符串类别的首选类型)。
  2.