sql-server - Varchar 到 nvarchar 不改变长度
问题描述
我有这个表,它为 varchar(255) 类型的 sub_id 列中的每一行存储一个 id,sql server。其他列存储 unicode,因此这些列是 nvarchar。现在,出于某种原因,我需要将 sub_id 更新为 nvarchar。我运行了以下命令:
ALTER TABLE TABLE_NAME ALTER COLUMN SUB_ID NVARCHAR(255)
这更改了列类型,但将长度设置为 510。我不想更改列的长度。如果我必须提到,表有很多数据,并且 sub_id 的长度永远不会超过 20。
我读到了这一点,但无法弄清楚如何截断该列的长度。
以下是 sp_help 上提到的表的快照(subject_id 是 sub_id)
解决方案
当您查看时sp_help
,长度表示以下内容(sp_help (Transact-SQL)):
Length smallint 数据类型的物理长度(以字节为单位)。
这并不意味着以字符为单位的列的长度。
单个nvarchar
字符的大小为 2 个字节,而不是一个。列的最大长度没有改变,但它的字节大小改变了。
如果您希望列的数据大小保持不变,则必须将该列设为nvarchar(127)
/ nvarchar(128)
(大小为 254/256 字节),并截断您的值。
推荐阅读
- php - HHVM Repo Authoritative - 删除源
- javascript - Java Script中构造函数和另一个函数之间的共享逻辑
- xml - XSLT 比较属性和值
- xquery - 将结果输出到文本文件时出现 XQuery 基数错误
- c# - ASP.NET 对大文件抛出 404,对超大文件抛出 400
- python - 检查变化的数字是低于还是高于上次
- json - Amazon Athena:更改表以忽略格式错误的 json 错误
- html - 为什么这个 HTML 没有结束
- 标签?
- javascript - '无法读取未定义的属性'DataTable''将 Google 图表实施到我的 SAPUI5 项目中
- jq - 访问具有给定值的数组的祖先