我习惯于操作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作为语句的一部分,该语句会引发字符集。