标签: encoding

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

Postgres 数据库编码问题

我正在努力从我的表中转换编码错误的数据。例如,我有一个字段,Nadège它应该是Nadège.

我尝试使用 Postgres 的函数convert, convert_fromconvert_to但没有取得多大成功。

db=# SHOW client_encoding;
 client_encoding 
-----------------
 UTF8
(1 row)

db=# SHOW server_encoding;
 server_encoding 
-----------------
 UTF8
(1 row)

db=# SELECT "firstName", encode("firstName"::bytea, 'hex') FROM contact;       
 firstName |       encode       
-----------+--------------------
 Nadège    | 4e6164c3a86765
 Nadège   | 4e6164c383c2a86765
(2 rows)

db=# SELECT "firstName", convert_from("firstName"::bytea, 'latin1') FROM contact WHERE "lastName" ILIKE 'crochard';
 firstName |  convert_from  
-----------+----------------
 Nadège    | Nadège
 Nadège   | NadÃ\u0083¨ge
(2 rows)

db=# SELECT "firstName", convert("firstName"::bytea, 'utf8', 'latin1') FROM contact; …
Run Code Online (Sandbox Code Playgroud)

postgresql utf-8 encoding

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

相当于 PostgreSQL 中的 UTF8_UNICODE_CI 排序规则

我想要 PostgreSQL 数据库中表中的一列(我使用的是 9.6 版)。我知道UTF8_UNICODE_CIMySQL上的排序规则,所以我尝试了:

CREATE TABLE thing (
    id    BIGINT PRIMARY KEY
   ,name  VARCHAR(120) NOT NULL COLLATE "UTF8_UNICODE_CI"
);
Run Code Online (Sandbox Code Playgroud)

但我得到:

ERROR: collation "UTF8_UNICODE_CI" for encoding "UTF8" does not exist
Run Code Online (Sandbox Code Playgroud)

环顾四周,我发现pg_collation表格显示了排序规则,其中显示:

=# SELECT * from pg_collation;
 collname | collnamespace | collowner | collencoding | collcollate | collctype
----------+---------------+-----------+--------------+-------------+-----------
 default  |            11 |        10 |           -1 |             |
 C        |            11 |        10 |           -1 | C           | C
 POSIX    |            11 |        10 |           -1 | …
Run Code Online (Sandbox Code Playgroud)

postgresql collation pattern-matching encoding case-sensitive

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

为什么我的 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 大容量插入正确解释某些 Unicode 字符而不是其他字符?

出于某种原因,MS SQL Server 2016 批量插入会误解/翻译 Unicode 字符:

  • C9 (É) 变成 2B (+)
  • A1 (¡) 到 ED (í)
  • A0 ( ) 到 E1 (á)
  • AE (®) 到 AB («)
  • CB (Ë) 到 2D (-)
  • D1 (Ñ) 到 2D (-)
  • 92 (') 到 C6 (Æ)
  • 96 (–) 到 FB (û)

即 Notepad++ 和 xxd 显示平面文件有 0xC9,但在批量插入后,表显示“+”,并在 SQL Server 中转换为 varbinary 显示为 0x2B。备份也有 0xC9。

我正在向 MS SQL Server 2016 中批量插入 25 个平面文件。它是 15Gb 数据,我正在使用管道 ( | ) 字段分隔符和CRLF行分隔符。

我批量插入到我提供的备份的截断结构中。当我与备份进行比较时,存在差异。注意:我必须等待 25 小时才能从数据源备份,但可以在 …

sql-server collation encoding unicode bulk-insert

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

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
查看次数

查询 sys.dm_exec_query_plan 时出现消息 6355“无法将一个或多个字符从 XML 转换为目标排序规则”

我喜欢在旅途中查找丢失的索引,查看执行计划

如果我想改进当前正在运行的东西,它可能会给我一个进一步的指示。

为此,我使用以下查询:

SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED


SELECT 
    er.session_id,
    er.blocking_session_id,
    er.start_time,
    er.status,
    dbName = DB_NAME(er.database_id),
    er.wait_type,
    er.wait_time,
    er.last_wait_type,
    er.granted_query_memory,
    er.reads,
    er.logical_reads,
    er.writes,
    er.row_count,
    er.total_elapsed_time,
    er.cpu_time,
    er.open_transaction_count,
    er.open_transaction_count,
    s.text,
    qp.query_plan,
    logDate = CONVERT(DATETIME,GETDATE()),
    logTime = CONVERT(DATETIME,GETDATE())
FROM sys.dm_exec_requests er 
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) s
CROSS APPLY sys.dm_exec_query_plan(er.plan_handle) qp
WHERE 
    CONVERT(VARCHAR(MAX), qp.query_plan) LIKE '%<missing%'
Run Code Online (Sandbox Code Playgroud)

它通常工作正常;但是,我最近遇到了整理和 XML 的问题:

在此处输入图片说明

错误信息说:

SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED


SELECT 
    er.session_id,
    er.blocking_session_id,
    er.start_time,
    er.status,
    dbName = DB_NAME(er.database_id),
    er.wait_type, …
Run Code Online (Sandbox Code Playgroud)

xml sql-server collation execution-plan encoding

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

Nvarchar 到 varchar 到 nvarchar 字符的转换

我有一个表格,里面有一些希腊文本行,如nvarchar(2000).

最近,我将列的类型更改为 ,varchar(4000)但我意识到一些希腊字符显示为问号。

所以,我试图改回以nvarchar(4000)修复它,因为我认为字符的 unicode 仍然保持不变。

我只是想知道,有没有办法解决这个问题,而不是在更改表之前恢复我创建的备份?

sql-server collation alter-table encoding unicode

4
推荐指数
1
解决办法
9001
查看次数

整理错误字符的问题

嗯,这个问题是众所周知的,但如果有的话,我正在寻找一个更聪明的解决方案。

出于某种原因,系统无法识别某些字符,我无法比较列

在此处输入图片说明

下面是一个文本示例:

ASPIRADOR ULTRASSONICO-LOCAÇAO (NOTA FISCAL SERVIÇO)

错误的

ASPIRADOR ULTRASSONICO-LOCA€AO (NOTA FISCAL SERVI€O)

其实我是通过这个功能来解决这个问题的

create function fixcollation(@ps_Texto VARCHAR(4000)) returns VARCHAR(4000) 

as 

begin  

    declare @vlgsv1itu INT declare @nxn68ezzi INT declare @dw17rsyva  VARCHAR(50) declare @iw8a2z01i VARCHAR(50) declare @t64e98xq6 VARCHAR(50) declare @zwjs2imy3 INT declare @jsyt85sy8 VARCHAR(4000)  

    ---------------------------------------------------- 

    set @dw17rsyva = ' …ƃ„µ·Ç¶Ž‚Šˆ‰ÔÒÓ¡‹ÖÞØ¢•ä“”àãå♣—–éëꚇ€§' 
    set @iw8a2z01i = 'áàãâäÁÀÃÂÄéèêëÈÉÊËíìïÍÌÏóòõôöÓÒÕÔÖúùûüÚÙÛÜçǺØ' 
    set @jsyt85sy8 = @ps_Texto set @zwjs2imy3 = IsNull(datalength(@ps_Texto), 0) 
    set @nxn68ezzi = 1 
    while(@nxn68ezzi <= IsNull(datalength( @ps_Texto), 0)) 

    begin 

        set @vlgsv1itu = 1 

        while(@vlgsv1itu <= …
Run Code Online (Sandbox Code Playgroud)

sql-server collation t-sql character-set encoding

4
推荐指数
1
解决办法
1431
查看次数

仅使用 ASCII 字符时,MySQL 8 ASCII 与 utf8mb4_0900_ai_ci 大小是否不同?

如果我只使用 ASCII 字符,磁盘上的VARCHAR (255)withutf8mb4_0900_ai_ci会比VARCHAR (255)使用 ASCII 大吗?

mysql collation character-set encoding mysql-8.0

4
推荐指数
1
解决办法
360
查看次数