NVARCHAR(MAXSIZE)

本文探讨了在Oracle数据库中使用NVARCHAR2类型字段时遇到的问题,特别是当字段长度设置为3000时出现的建表失败情况。通过查询官方文档及v$nls_parameters视图,明确了不同字符集下NVARCHAR2的最大长度限制。

昨日上线个表 其中好多NVARCHAR2字段 其中一个设置了3000 结果无法建表. 虽然在开发库OK

  SH_REMARK            NVARCHAR2(3000),

官方文档如此说

The maximum column size allowed is 4000 characters when the national character set is UTF8 and 2000 when it is AL16UTF16. The maximum length of an NVARCHAR2 column in bytes is 4000.

意思是 如果国家字符集是UTF8 那就是4000 如果是UTF16那是2000  BYTES总大小4000 


SQL> select * from v$nls_parameters where parameter like 'NLS%';
 
PARAMETER                                                        VALUE
---------------------------------------------------------------- ----------------------------------------------------------------
NLS_LANGUAGE                                                     AMERICAN
NLS_TERRITORY                                                    AMERICA
NLS_CURRENCY                                                     $
NLS_ISO_CURRENCY                                                 AMERICA
NLS_NUMERIC_CHARACTERS                                           .,
NLS_CALENDAR                                                              GREGORIAN
NLS_DATE_FORMAT                                                         DD-MON-RR
NLS_DATE_LANGUAGE                                                   AMERICAN
NLS_CHARACTERSET                                                      AL32UTF8
NLS_SORT                                                                            BINARY
NLS_TIME_FORMAT                                                            HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT                                                DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT                                                      HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT                                          DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY                                                   $
NLS_NCHAR_CHARACTERSET                                      AL16UTF16
NLS_COMP                                                                           BINARY
NLS_LENGTH_SEMANTICS                                             BYTE
NLS_NCHAR_CONV_EXCP                                              FALSE

要对sqlserver的表分区 已知已经进行了以下操作 ALTER DATABASE [SL_LMS] ADD FILEGROUP SL_LMS_FG_2019; ALTER DATABASE [SL_LMS] ADD FILEGROUP SL_LMS_FG_2020; ALTER DATABASE [SL_LMS] ADD FILEGROUP SL_LMS_FG_2021; ALTER DATABASE [SL_LMS] ADD FILEGROUP SL_LMS_FG_2022; ALTER DATABASE [SL_LMS] ADD FILEGROUP SL_LMS_FG_2023; ALTER DATABASE [SL_LMS] ADD FILEGROUP SL_LMS_FG_2024; ALTER DATABASE [SL_LMS] ADD FILEGROUP SL_LMS_FG_2025; ALTER DATABASE [SL_LMS] ADD FILEGROUP SL_LMS_FG_2026; SELECT * FROM sys.filegroups; --创建分区文件并挂载到对应年份的文件组 ALTER DATABASE [SL_LMS] ADD FILE ( NAME = 'SL_LMS_FG_2019_Data', FILENAME = '/var/opt/mssql/data/SL_LMS_2019.ndf', SIZE = 100MB, MAXSIZE = 500MB, FILEGROWTH = 100MB ) TO FILEGROUP SL_LMS_FG_2019; ALTER DATABASE [SL_LMS] ADD FILE ( NAME = 'SL_LMS_FG_2020_Data', FILENAME = '/var/opt/mssql/data/SL_LMS_2020.ndf', SIZE = 100MB, MAXSIZE = 500MB, FILEGROWTH = 100MB ) TO FILEGROUP SL_LMS_FG_2020; ALTER DATABASE [SL_LMS] ADD FILE ( NAME = 'SL_LMS_FG_2021_Data', FILENAME = '/var/opt/mssql/data/SL_LMS_2021.ndf', SIZE = 100MB, MAXSIZE = 500MB, FILEGROWTH = 100MB ) TO FILEGROUP SL_LMS_FG_2021; ALTER DATABASE [SL_LMS] ADD FILE ( NAME = 'SL_LMS_FG_2022_Data', FILENAME = '/var/opt/mssql/data/SL_LMS_2022.ndf', SIZE = 100MB, MAXSIZE = 500MB, FILEGROWTH = 100MB ) TO FILEGROUP SL_LMS_FG_2022; ALTER DATABASE [SL_LMS] ADD FILE ( NAME = 'SL_LMS_FG_2023_Data', FILENAME = '/var/opt/mssql/data/SL_LMS_2023.ndf', SIZE = 100MB, MAXSIZE = 500MB, FILEGROWTH = 100MB ) TO FILEGROUP SL_LMS_FG_2023; ALTER DATABASE [SL_LMS] ADD FILE ( NAME = 'SL_LMS_FG_2024_Data', FILENAME = '/var/opt/mssql/data/SL_LMS_2024.ndf', SIZE = 100MB, MAXSIZE = 500MB, FILEGROWTH = 100MB ) TO FILEGROUP SL_LMS_FG_2024; ALTER DATABASE [SL_LMS] ADD FILE ( NAME = 'SL_LMS_FG_2025_Data', FILENAME = '/var/opt/mssql/data/SL_LMS_2025.ndf', SIZE = 100MB, MAXSIZE = 500MB, FILEGROWTH = 100MB ) TO FILEGROUP SL_LMS_FG_2025; SELECT name AS file_name, physical_name AS file_path, size/128.0 AS size_mb, type_desc AS file_type FROM sys.database_files; -- 1. 创建分区函数 CREATE PARTITION FUNCTION pf_created_time_bigint_by_year (BIGINT) AS RANGE LEFT FOR VALUES ( 1577807999000, -- 2019 结束 1609430399000, -- 2020 结束 1640966399000, -- 2021 结束 1672502399000, -- 2022 结束 1704038399000, -- 2023 结束 1735660799000, -- 2024 结束 1767196799000 -- 2025 结束 ); -- 2. 创建分区方案(映射到文件组) CREATE PARTITION SCHEME ps_created_time_bigint_by_year AS PARTITION pf_created_time_bigint_by_year TO ( [SL_LMS_FG_2019], [SL_LMS_FG_2020], [SL_LMS_FG_2021], [SL_LMS_FG_2022], [SL_LMS_FG_2023], [SL_LMS_FG_2024], [SL_LMS_FG_2025],[SL_LMS_FG_2026] ); --对user表分区 CREATE TABLE dbo.t_user_p ( [id] [nvarchar](128) NOT NULL, [user_code] [nvarchar](128) NOT NULL, [gender] [nvarchar](8) NULL, [email] [nvarchar](128) NULL, [country_code] [nvarchar](8) NULL, [mobile] [nvarchar](16) NULL, [password] [nvarchar](128) NOT NULL, [salt] [nvarchar](32) NOT NULL, [secret] [nvarchar](256) NULL, [status] [nvarchar](255) NOT NULL, [avatar] [nvarchar](1000) NULL, [create_user_id] [nvarchar](36) NULL, [created_time] [bigint] not NULL, [update_user_id] [nvarchar](36) NULL, [updated_time] [bigint] NULL, [deleted] [int] NOT NULL, [is_external] [tinyint] NOT NULL, [is_candidate] [tinyint] NOT NULL, [avatar_url] [nvarchar](1024) NOT NULL, [citizen_id] [nvarchar](13) NULL, [birth_of_date] [nvarchar](13) NULL, [agent_code] [nvarchar](128) NULL, [fk_branch_id] [bigint] NULL, [type] [nvarchar](16) NULL, [login_result] [nvarchar](20) NULL, [error_description] [nvarchar](1024) NULL, [user_department] [nvarchar](30) NULL, [leader] [nvarchar](20) NULL, [is_logout] [int] NULL, [login_role] [int] NULL, [first_name] [nvarchar](128) NULL, [last_name] [nvarchar](128) NULL, [username] AS (concat_ws(' ',[first_name],[last_name])) PERSISTED NOT NULL, [avatar_file_id] [nvarchar](255) NULL, CONSTRAINT [PK_t_user_p] PRIMARY KEY CLUSTERED ([created_time] ASC,[id] ASC) ON ps_created_time_bigint_by_year ([created_time]), -- 关键:使用分区方案 CONSTRAINT [UQ_t_user_code_p] UNIQUE NONCLUSTERED ([user_code] ASC) ON [PRIMARY] ) ON ps_created_time_bigint_by_year ([created_time]); 要求验证对表t_user_p的分区是否生效 sqlserver的版本为 Microsoft SQL Server 2022 (RTM-CU10) (KB5031778) - 16.0.4095.4 (X64) Oct 30 2023 16:12:44 Copyright (C) 2022 Microsoft Corporation Developer Edition (64-bit) on Linux (Ubuntu 22.04.3 LTS) <X64>
最新发布
11-07
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值