标签: unicode

与 MySQL 的 utf8mb4 字符集等效的 SQL Server 是什么?

我们有一些基于数据库的 Web 应用程序,它们utf8mb4用作字符集和utf8mb4_Standard排序规则。

MYSQL

我们看到我们可以在这个设置中使用我们想要的任何字符。

在 SQL Server Express 中,情况对我来说不是很清楚。

当我切换到Standard它时选择Latin1_General_CI_AS排序规则。

但我不知道这是哪种字符编码,如果我们想将一些数据从utf7mb8MySQL 表接管到 SQL Server 中,它会如何影响场景。

在此处输入图片说明

当我查看 SQL Server 中的数据类型定义时,我可以看到有 Unicode 和非 Unicode 类型。所以我想知道排序规则是否真的影响它的存储方式:

在此处输入图片说明

看来,如果您使用nchar,nvarchar或者nvarchar(max)您在使用 UTF-16 时处于安全状态。

但是,整理Latin1_General_CI_AS是什么意思?

例如,特别是如果你有中文字符,这会如何表现?

sql-server migration collation character-set unicode

7
推荐指数
2
解决办法
5820
查看次数

如何列出 postgreSQL 中可用的所有可用编码类型?

SELECT datname, pg_encoding_to_char(encoding) 
FROM pg_database;
Run Code Online (Sandbox Code Playgroud)

...列出所有数据库,每个数据库都有其编码类型。

但是,我试图找出PostgreSQL 服务器中可用的所有编码类型。我可以查询所有可用的编码类型吗?

还是在第 23.3 章字符集支持中列出了唯一可用的编码类型?

postgresql character-set encoding unicode

7
推荐指数
1
解决办法
3129
查看次数

是否有(非二进制)MySQL 排序规则不将不同的数学符号视为相同的字符?

我对 MySQL 的排序规则和非 BMP 字符(Unicode 代码点高于 U+FFFF 的字符)感到非常头疼。

基本上,给定一个表和数据,如:

CREATE TABLE `math` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `symbols` varchar(32) character set utf8mb4 not null,
  PRIMARY KEY (`id`),
  UNIQUE KEY `symbols` (`symbols`)
);
INSERT INTO `math` VALUES (1,'');
Run Code Online (Sandbox Code Playgroud)

(您可能没有字体来显示上面字符串文字中的字符。它是U+1D542 MATHEMATICAL DOUBLE-STRUCK CAPITAL K

事情看起来不错:

mysql> select * from math;
+----+---------+
| id | symbols |
+----+---------+
|  1 |        |
+----+---------+
1 row in set (0.00 sec)

mysql> select * from math where symbols = '';
+----+---------+
| …
Run Code Online (Sandbox Code Playgroud)

collation mysql-5.5 unicode

6
推荐指数
1
解决办法
311
查看次数

如何查找具有多个连续大写字符的值

对于我正在处理的项目,我需要识别大写不正确的值。

例如,我需要它来识别以下类型的值:

Mr JOHN Smith
MR John Smith
Mr John SMITH
Mr JOhn Smith
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的想法:

Select * from table where Name = upper(Name) 
  collate SQL_Latin1_General_CP1_CS_AS
Run Code Online (Sandbox Code Playgroud)

(它给出了全部大写的行的结果,例如 MR JOHN SMITH)

Select * from table where right(Name,3) = upper(right(Name,3)) 
  collate SQL_Latin1_General_CP1_CS_AS
Run Code Online (Sandbox Code Playgroud)

它也拾取了一些行。

但我怀疑这是解决此问题的最有效方法。

sql-server collation t-sql sql-server-2014 unicode

6
推荐指数
1
解决办法
3632
查看次数

Postgres 9.5 中 Unicode 文本的一致性检查不一致?

使用 PostgreSQL 9.5。似乎 Postgres 与它比较类似于??. 一个唯一的约束是考虑一些相等的字符串,GROUP BY而这些字符串是不同的。

我有一个GROUP BYTEXT列上使用的选择查询和在其他一些列上使用的聚合函数以确保TEXT输出中列的唯一性,并且我将结果插入到具有主键(因此是唯一的)约束的表中这TEXT列。

看起来与此相似;为简单起见,我刚刚更改了表名:

 INSERT INTO mytable ( % mytable has string TEXT PRIMARY KEY, score INT
            SELECT 
            sq1.string string, sq2.score / sq1.score
            FROM
            (
                SELECT n.string string, SUM(n.score) score
                FROM
                othertable1 n % has string TEXT (non-unique) and score INT
                GROUP BY string
            ) sq1,
            (
                SELECT n.string string, SUM(n.score) score
                FROM
                othertable2 n % has string TEXT (non-unique) and score …
Run Code Online (Sandbox Code Playgroud)

postgresql unique-constraint unicode

6
推荐指数
0
解决办法
564
查看次数

5
推荐指数
1
解决办法
1304
查看次数

如何有效地缩小某些 Unicode 字段的大小?

我们有一个 SQL Server 2012 Enterprise 实时事务数据库,现在每月增长超过 1G,并且对我们来说已经成为一个大小问题。目前是23G。字符类型字段都是 Unicode,我已经计算出节省了 5G 的空间,将 2 个这样的字段平均每个 206 个字符转换为非 Unicode,如果我们将它们中的一些从 nchar 和 nvarchar 转换为 char 和几乎 10G 的空间varchar 类型。这些字段永远不需要保存不能在 SQL_Latin1_General_CP1_CI_AS 归类中的 Unicode 字符,因为它们最初是作为纯 ASCII 出现的,并且将始终按照协议标准这样做。

我是软件架构师和首席 C# 开发人员,尽管我只是一个 DBA 黑客,否则我不会将我们的数据库设计为具有用于大容量表的 Unicode 字段,而在 3 年前创建数据库时,这些字段不需要 Unicode。在我们最终转换到 AlwaysOn 环境以帮助解决各种性能和备份问题之前,我现在想纠正这个错误。

在缩小这两个或更多字段后,我们希望将数据库缩小一次,以利用节省的空间进行完整备份,并为 AlwaysOn 环境做种。

问题是——

  1. 将列从 nchar/nvarchar 缩小到 char/varchar 类型的最安全和最有效的转换技术是什么?特别是 当同一个表中有多个字段需要转换时。我测试了我想从 nvarchar(max) 转换为 varchar(max) 的两个主要字段的“添加新列,设置新=旧,删除旧,重命名旧到新”,并且花了 81 分钟我们的测试服务器(4 个虚拟核心,8G 内存)在磁盘空间耗尽之前,即使磁盘上还剩下 8G,并且数据库设置了无限大小(无法为对象“dbo.abc”分配空间。“PK_xyz”在数据库 'xxx' 中,因为 'PRIMARY' 文件组已满)。在收到磁盘警告后,我确实在完成之前删除了一个旧数据库,所以它可能没有计算新空间。无论如何,它太慢了。这只是在这些列中最大的两列(12.6M 行)上,并且只运行 2% 到 3% 的 CPU 繁忙,因此看起来效率不高,并且如果我们甚至要转换这两个字段而不是任何附加字段,则表明停机时间是不可接受的。这两个字段的平均字段大小仅为 206 个字符或每个 412 个字节。我计划尝试的另一种技术是在新模式中创建新表 def,从旧表中选择它,然后在模式之间移动表并删除旧表。我在桌子上有一个 FK 和索引要处理。我计划尝试的另一种技术是在新模式中创建新表 def,从旧表中选择它,然后在模式之间移动表并删除旧表。我在桌子上有一个 …

sql-server-2012 unicode

5
推荐指数
1
解决办法
286
查看次数

唯一索引值中有问题的斜线和问号

PhoneSQL Server 在唯一索引中将它们视为相同的下面插入的值是什么意思?

CREATE TABLE Phone
(
  Id int identity(1, 1) primary key,
  Phone nvarchar(448) not null
)
go

create unique index IX_Phone on Phone(Phone)
with (data_compression = page);
go

insert into Phone Values ('?281/?263-?8400');
insert into Phone Values ('?281/?263-?8400');

select * from Phone;

drop table Phone;
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息:

消息 2601,级别 14,状态 1,第 13 行无法在唯一索引为“IX_Phone”的对象“dbo.Phone”中插入重复的键行。重复的键值为 (?281/?263-?8400)。

sql-server unicode sql-server-2016

5
推荐指数
1
解决办法
1293
查看次数

为什么我的 UTF-8 文档在 Azure Data Lake Analytics 中引发 UTF-8 编码错误?

我有一个从未知来源系统以 gunzip 压缩的文档。它是使用 7zip 控制台应用程序下载和解压缩的。该文档是一个 CSV 文件,似乎以 UTF-8 编码。

然后在压缩后立即上传到 Azure Data Lake Store。然后有一个 U-SQL 作业设置,只需将它从一个文件夹复制到另一个文件夹。此过程失败并引发值的 UTF-8 编码错误:ée

测试

我从商店下载了该文档并删除了所有记录,但带有 Azure 标记值的记录除外。在 Notepad++ 中,它将文档显示为 UTF-8。我再次将文档保存为 UTF-8 并将其上传回商店。我再次运行该过程,该过程成功,该值为 UTF-8

我在这里缺少什么?原始文档是否可能不是真正的 UTF-8?是否还有其他原因导致误报?我有点困惑。

可能性

  • 文件不是真正的UTF-8,需要重新编码
  • 也许上传文件的方法是重新编码
  • 也许 7zip 重新编码不正确

环境/工具

  • 视窗服务器
  • 蟒蛇 2.7
  • Azure 数据湖存储
  • Azure 数据湖分析
  • 7Zip.exe
  • gz
  • Azure API

USQL

只是定义架构的基本 USQL 作业然后将所有字段选择到一个新目录。除了省略标题之外,不会发生任何转换。该文件是 CSV,用逗号分隔的字符串中的双引号。无论数据类型如何,架构都是字符串。尝试的提取器是 TEXT 和 CSV,两者都设置为编码:UTF8,即使根据系统上的 Azure 文档,两者都默认为 UTF8。

其他注意事项

  1. 该文档过去曾上传到 BLOB 存储,并通过 Polybase 以相同方式导入 Azure 数据仓库,没有出现错误。
  2. 导致 UTF-8 编码错误的值是在 100 万条其他记录中乱码的 URL。
  3. 即使它是一个 UTF-8 文档,它看起来也有 ASCII 字符。
  4. 当我将其转换为 ANSI …

import encoding hadoop unicode azure

5
推荐指数
1
解决办法
3648
查看次数

SQL Server 与 Oracle 中多字节字符的字节排序

我目前正在将数据从 Oracle 迁移到 SQL Server,但在尝试验证迁移后的数据时遇到了问题。

环境详情:

  • Oracle 12 - AL32UTF8 字符集
  • 客户端 - NLS_LANG - WE8MSWIN1252
  • VARCHAR2 字段

SQL Server 2016

  • Latin1_General_CI_AS 整理
  • NVARCHAR 字段

我在 Oracle 上使用 DBMS_CRYPTO.HASH 生成整行的校验和,然后复制到 SQL 并使用 HASHBYTES 生成整行的校验和,然后我将其进行比较以验证数据匹配。

除具有多字节字符的行外,所有行的校验和都匹配。

例如,具有以下字符的行: ? 校验和不匹配,即使数据传输正确。当我在 Oracle 中使用 DUMP 或在 SQL Server 中转换为 VARBINARY 时,除此字符的字节外,数据完全匹配。

在 SQL Server 中,字节为 0xE625,在 Oracle 中为 0x25E6。

为什么它们的顺序不同,是否有可靠的方法将一个转换为另一个以确保另一端的校验和与具有多字节字符的字符串匹配?

oracle sql-server encoding hashing unicode

5
推荐指数
1
解决办法
1267
查看次数