为什么 MSSQL 不支持指定为"创建数据库"语句一部分的"字符集"?



我习惯于操作MySQL数据库,其中CHARACTER SET(可选(与COLLATION:一起指定为CREATE DATABASE语句的一部分

engine.execute(f'CREATE DATABASE IF NOT EXISTS {db} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci')

但是,对于MSSQL,我只能指定COLLATION:

engine.execute(f'CREATE DATABASE {db} COLLATE Latin1_General_100_CI_AI_SC')

为MSSQL创建数据库时,为什么不能指定CHARACTER SET

排序规则和字符集之间有着密切的相互关系。某些排序规则可以在某些字符集中提出,但不能在其他字符集中提出。混合所有字符集和排序规则是不可能的。Microsoft SQL Server选择了简单性,通过归纳字符集的排序规则来提供最广泛的可能性。这就是为什么,事实上,MS SQL Server拥有世界上所有数据库中最完整的字符/排序规则选择。。。

要做到这一点,有两个COLLATIONS家族:

  • 用于数据的语义利用的排序,称为";Windows排序规则";并且对应于ASCII/UNICODE通用字符集
  • 用于数据的技术利用的校勘;SQL排序规则";并且对应于特定的字符集(这些排序规则由"SQL_"前缀命名(

SQL排序规则主要用于导入数据,当您有一个具有特定字符编码的文件时,不会丢失任何特殊字符。

所以CREATE DATABASE只支持COLLATION作为语句的一部分,该语句会引发字符集。

相关内容

  • 没有找到相关文章

最新更新