You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ktor+Exposed ORM+SQL Server中定义NVARCHAR类型

在Ktor+Exposed中解决SQL Server存储阿拉伯文本的问题

核心问题分析

Exposed ORM默认未提供SQL Server的NVARCHAR类型支持,且你之前使用的characterEncoding和useUnicode是MySQL JDBC驱动的专属参数,对SQL Server完全无效,这是导致阿拉伯文本存储失败的关键原因。

解决方案步骤

  • 自定义Exposed列类型映射NVARCHAR
    手动实现对应SQL Server NVARCHAR的ColumnType,让Exposed生成正确的数据库字段类型:

    class NVarcharColumnType(val length: Int = 255) : StringColumnType() {
        override fun sqlType(): String = "NVARCHAR($length)"
    }
    
    // 在表定义中使用该类型
    object TargetTable : Table() {
        val arabicContent = registerColumn("arabic_content", NVarcharColumnType(1000))
        // 其他字段定义...
    }
    
  • 修正JDBC连接字符串
    移除无效的MySQL参数,添加SQL Server专属的sendStringParametersAsUnicode=true参数,确保字符串以Unicode编码发送到数据库:

    jdbc:sqlserver://DESKTOP;databaseName=MyDb;integratedSecurity=true;encrypt=false;sendStringParametersAsUnicode=true
    
  • 验证数据库字段类型
    确认目标数据库列的类型为NVARCHAR(而非VARCHAR),VARCHAR仅支持单字节字符集,无法存储阿拉伯文这类Unicode字符。

内容的提问来源于stack exchange,提问作者Mena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 15:05:56