gpt4 book ai didi

mysql - ServiceStack.OrmLite : StringLengthAttribute. MaxText 生成 "LONGTEXT"- 如何设置为 "TEXT"?

转载 作者:行者123 更新时间:2023-11-29 10:08:11 25 4
gpt4 key购买 nike

使用 ServiceStack 的 OrmLite 并使用以下属性装饰属性,创建 LONGTEXT 类型的列,而不是文档中所述的 TEXT:

enter image description here

但它变成了 LONGTEXT:

enter image description here

我尝试将 StringLenghtAttribute 设置为其他值,6553570000Int32.MaxValue 等,但是它要么将其解释为 VARCHAR 并给我列长度太大行大小太大,或者它变成了 LONGTEXT。

问题是:如何强制它变成“TEXT”(或 mysql 中的任何其他文本类型)?

我也许可以修改MaxColumnDefinition并将其设置为TEXT,但我认为我永远不会得到LONGTEXT。

enter image description here

更新

MaxColumnDefinition 设置为 TEXT 并没有改变任何事情。

我可以用属性来装饰类,以某种方式指定类型吗?还是这太特定于 sql 版本?

或者也许我应该重写GetColumnDefinition并实现我自己的逻辑...

最佳答案

(请注意,此解决方案会产生其他问题,我将在单独的 SO 帖子中询问)

经过更多研究,解决了创建我自己的 StringConverter 的问题,如下所示:

public class MyStringConverter : StringConverter
{
public override string GetColumnDefinition(int? stringLength)
{
if (stringLength.GetValueOrDefault() == StringLengthAttribute.MaxText)
return MaxColumnDefinition;

if (stringLength.GetValueOrDefault(StringLength) <= 255)
{
return UseUnicode
? $"NVARCHAR({stringLength.GetValueOrDefault(StringLength)})"
: $"VARCHAR({stringLength.GetValueOrDefault(StringLength)})";
}
else if (stringLength.GetValueOrDefault(StringLength) <= 65535)
{
return $"TEXT";
}
else
{
return "LONGTEXT";
}
}
}

我还建议将默认 StringLength 设置为小于默认 8000:

StringConverter converter = OrmLiteConfig.DialectProvider.GetStringConverter();
converter.StringLength = 255;

这样,默认的字符串将是varchar(255)。如果您想将特定的字符串属性设置为其他内容,请根据MyStringConverter设置该属性:

type = typeof(tWorks.Core.CoreCommons.ContactModuleProtocols.SMS.ModuleSettingsSMS);
type.GetProperty(nameof(MyClass.Prop1)).AddAttributes(new StringLengthAttribute(255)); // ==> varchar(255)
type.GetProperty(nameof(MyClass.Prop2)).AddAttributes(new StringLengthAttribute(500)); // ==> TEXT
type.GetProperty(nameof(MyClass.Prop3)).AddAttributes(new StringLengthAttribute(70000)); // ==> LONGTEXT

关于mysql - ServiceStack.OrmLite : StringLengthAttribute. MaxText 生成 "LONGTEXT"- 如何设置为 "TEXT"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51494824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com