sql-server - WITH UTF-8 排序规则数据库中 CHAR 和 NCHAR 的区别
问题描述
在 SAP SQL Anywhere(其中数据类型和大多数结构与 SQL Server 非常相似)中,默认数据库排序规则设置为 UTF-8 - 详细设置如下:
我有一组特殊字符,数据库需要存储和使用(范围:U+1400 - U+167F),并且在测试插入之后,数据类型VARCHAR
和NVARCHAR
数据类型都能够容纳这些特殊字符而没有明显差异(除了分配空间) - 见下文:
当数据库排序规则设置为 UTF-8(使用 UTF8BIN 字符集)时,我是否正确理解CHAR/VARCHAR
数据类型默认能够存储 UTF-8 字符集和NCHAR/NVARCHAR
UTF-16?意思是,如果我只需要 UTF-8 范围,我不必将所有CHAR/VARCHAR
对象转换为NCHAR/NVARCHAR
: U+1400 - U+167F ?
解决方案
回答我自己的问题:
是的,UTF-8 排序规则中的 CHAR 和 VARCHAR 将存储所有字符,但数据类型长度规范会有所不同。定义 varchar 长度时,例如:VARCHAR(100) 我们期望 100 个字符的字符串限制。这仅适用于 1char = 1byte (ASCII) 的字符,对于所有 UTF-8 字符(2-4bytes),数字将指定字节长度,例如:VARCHAR(100) 将只能包含 UTF-8 字符串4 字节 UTF-8 文本的长度为 25 个字符。
请随时纠正我或改进我的答案。
推荐阅读
- rust - diesel.rs 和rocket.rs:不明白为什么它需要一个数据库表
- javascript - react js中的位置排名表
- javascript - Javascript包含并映射在一起
- java - 如何解决强化扫描问题 - 代码正确性:字节数组到字符串转换
- python - 如何检查页面是否在 __init__ 中加载?
- python-3.x - 当 fuglu 扫描仪插件收到电子邮件时,如何检查可能带有或不带有附件的电子邮件的大小?
- javascript - Node JS 中的 Google Analytics API JWT 身份验证错误
- python - 禁止特定请求调用的 python 记录器
- sql-server - 如何更改 Powershell Core 中的“dotnet ef”CLI 工具生成的文件的编码?
- c++ - 为什么在 C++ 中迭代向量时无法执行比较?