Jez*_*Jez 2 sql-server collation
如果排序规则是数据库默认值,SQL Server 似乎会不遗余力地删除COLLATE对列的限制。nvarchar我的数据库默认是SQL_Latin1_General_CP1_CI_AS. 如果我这样创建一个表:
CREATE TABLE [dbo].[UserActive](
[Id] [uniqueidentifier] NOT NULL,
[DateCreated] [datetimeoffset](7) NOT NULL,
[Username] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[Password] [nvarchar](max) NULL,
[Email] [nvarchar](254) NOT NULL,
CONSTRAINT [PK_UserActive] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
...然后要求 SQL Server Management Studio 将表编写为CREATE语句,我得到以下结果:
CREATE TABLE [dbo].[UserActive](
[Id] [uniqueidentifier] NOT NULL,
[DateCreated] [datetimeoffset](7) NOT NULL,
[Username] [nvarchar](50) NOT NULL,
[Password] [nvarchar](max) NULL,
[Email] [nvarchar](254) NOT NULL,
CONSTRAINT [PK_UserActive] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
有什么方法可以保留显式COLLATE即使它是数据库默认值吗?我想明确说明这样一个事实:我在列上添加的任何唯一索引都Username将具有不区分大小写的排序规则,即使数据库默认值由于某种原因发生了更改。它很好并且是自记录的,如果没有显式排序规则作为表定义的一部分,它就会丢失。
SSMS 脚本选项(工具-->选项-->SQL Server 对象资源管理器-->脚本-->表和视图选项)允许您在编写对象脚本时包含COLLATE(或不包含)子句:
| 归档时间: |
|
| 查看次数: |
409 次 |
| 最近记录: |