sql nvarchar 对应oracle 啥类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql nvarchar 对应oracle 啥类型相关的知识,希望对你有一定的参考价值。
sql server 中的nvarchar相当于oracle中的nvarchar2。在中文字符长度方面能很好的兼容,有n的话一个中文就是一个长度,没n的话一个中文两个长度。 参考技术A sql nvarchar 对应oracle varchar2本回答被提问者和网友采纳 参考技术B 对应varchar2将现有 SQL Server 2005 数据库中的数据类型 varchar 更改为 nvarchar。有啥问题吗?
【中文标题】将现有 SQL Server 2005 数据库中的数据类型 varchar 更改为 nvarchar。有啥问题吗?【英文标题】:Change datatype varchar to nvarchar in existing SQL Server 2005 database. Any issues?将现有 SQL Server 2005 数据库中的数据类型 varchar 更改为 nvarchar。有什么问题吗? 【发布时间】:2011-12-30 18:02:58 【问题描述】:我需要将数据库表中的列数据类型从varchar
更改为nvarchar
以支持中文字符(目前,具有这些字符的varchar
字段仅显示问号)。
我知道如何更改这些值,但我想看看这样做是否安全。换衣服前有什么要注意的吗?谢谢!
【问题讨论】:
【参考方案1】:检查此表的所有依赖项,因为存储的过程、函数、基于此表的临时表以及用于插入/更新等的变量也可能需要更新为 NVARCHAR。 还要检查表是否在复制中!这可能会给您带来一系列新问题!
【讨论】:
【参考方案2】:你可以在非主键字段上做:
ALTER TABLE [TableName]
ALTER COLUMN [ColumnName] nvarchar(N) null
在主键字段上它不起作用 - 您必须重新创建表
【讨论】:
或者删除然后重新创建主键,以及任何引用它的外键【参考方案3】:请注意,此更改是数据大小更新,请参阅SQL Server table columns under the hood。该更改将添加一个新的 NVARCHAR 列,它将更新每一行,将 dta 从旧的 VARCHAR 复制到新的 NVARCHAR 列,然后将旧的 VARCHAR 列标记为已删除。如果表很大,这会产生很大的日志,所以要做好准备。更新后,运行DBCC CLEANTABLE
回收之前的 VARCHAR 列使用的空间。如果你负担得起,最好运行ALTER TABLE ... REBUILD
,它不仅会回收空间,还会完全删除物理删除的 VARCHAR 列。开头的链接文章有更多详细信息。
您可能也有兴趣为您的表启用Unicode Compression。
【讨论】:
【参考方案4】:桌子会变大。列中的每个字符将占用两倍的空间来存储。除非桌子真的很大,否则您可能不会注意到。
处理列数据的存储过程/视图/查询可能需要修改以处理 nvarchar。
【讨论】:
【参考方案5】:确保长度不超过 4000,因为 VARCHAR 的最大值为 8000,而 NVARCHAR 仅为 4K。
【讨论】:
默认情况下,nvarchar(MAX) 值的存储方式与 nvarchar(4000) 值完全相同,除非实际长度超过 4000 个字符;在这种情况下,行内数据被一个指向存储数据的一个或多个单独页面的指针替换。 NVARCHAR(MAX) 可以容纳 2GB 的数据以上是关于sql nvarchar 对应oracle 啥类型的主要内容,如果未能解决你的问题,请参考以下文章
将现有 SQL Server 2005 数据库中的数据类型 varchar 更改为 nvarchar。有啥问题吗?
sql 中int nvarchar char VARchar 有啥区别