如何在Ktor+Exposed ORM+SQL Server中定义NVARCHAR类型
在Ktor+Exposed中解决SQL Server存储阿拉伯文本的问题
核心问题分析
Exposed ORM默认未提供SQL Server的NVARCHAR类型支持,且你之前使用的characterEncoding和useUnicode是MySQL JDBC驱动的专属参数,对SQL Server完全无效,这是导致阿拉伯文本存储失败的关键原因。
解决方案步骤
自定义Exposed列类型映射NVARCHAR
手动实现对应SQL ServerNVARCHAR的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
相关产品推荐
相关产品推荐

