select * from (select N'?? ' as t) as t2 where t= ''
Run Code Online (Sandbox Code Playgroud)
字符串 '?? ' 匹配上面的检查,这是为什么?
我正在努力从我的表中转换编码错误的数据。例如,我有一个字段,Nadège
它应该是Nadège
.
我尝试使用 Postgres 的函数convert
, convert_from
,convert_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 数据库中表中的一列(我使用的是 9.6 版)。我知道UTF8_UNICODE_CI
MySQL上的排序规则,所以我尝试了:
CREATE TABLE thing (
id BIGINT PRIMARY KEY
,name VARCHAR(120) NOT NULL COLLATE "UTF8_UNICODE_CI"
);
Run Code Online (Sandbox Code Playgroud)
但我得到:
Run Code Online (Sandbox Code Playgroud)ERROR: collation "UTF8_UNICODE_CI" for encoding "UTF8" does not exist
环顾四周,我发现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
我有一个从未知来源系统以 gunzip 压缩的文档。它是使用 7zip 控制台应用程序下载和解压缩的。该文档是一个 CSV 文件,似乎以 UTF-8 编码。
然后在压缩后立即上传到 Azure Data Lake Store。然后有一个 U-SQL 作业设置,只需将它从一个文件夹复制到另一个文件夹。此过程失败并引发值的 UTF-8 编码错误:ée
测试
我从商店下载了该文档并删除了所有记录,但带有 Azure 标记值的记录除外。在 Notepad++ 中,它将文档显示为 UTF-8。我再次将文档保存为 UTF-8 并将其上传回商店。我再次运行该过程,该过程成功,该值为 UTF-8
我在这里缺少什么?原始文档是否可能不是真正的 UTF-8?是否还有其他原因导致误报?我有点困惑。
可能性
环境/工具
USQL
只是定义架构的基本 USQL 作业然后将所有字段选择到一个新目录。除了省略标题之外,不会发生任何转换。该文件是 CSV,用逗号分隔的字符串中的双引号。无论数据类型如何,架构都是字符串。尝试的提取器是 TEXT 和 CSV,两者都设置为编码:UTF8,即使根据系统上的 Azure 文档,两者都默认为 UTF8。
其他注意事项
出于某种原因,MS SQL Server 2016 批量插入会误解/翻译 Unicode 字符:
即 Notepad++ 和 xxd 显示平面文件有 0xC9,但在批量插入后,表显示“+”,并在 SQL Server 中转换为 varbinary 显示为 0x2B。备份也有 0xC9。
我正在向 MS SQL Server 2016 中批量插入 25 个平面文件。它是 15Gb 数据,我正在使用管道 ( | ) 字段分隔符和CRLF行分隔符。
我批量插入到我提供的备份的截断结构中。当我与备份进行比较时,存在差异。注意:我必须等待 25 小时才能从数据源备份,但可以在 …
我目前正在将数据从 Oracle 迁移到 SQL Server,但在尝试验证迁移后的数据时遇到了问题。
环境详情:
SQL Server 2016
我在 Oracle 上使用 DBMS_CRYPTO.HASH 生成整行的校验和,然后复制到 SQL 并使用 HASHBYTES 生成整行的校验和,然后我将其进行比较以验证数据匹配。
除具有多字节字符的行外,所有行的校验和都匹配。
例如,具有以下字符的行: ? 校验和不匹配,即使数据传输正确。当我在 Oracle 中使用 DUMP 或在 SQL Server 中转换为 VARBINARY 时,除此字符的字节外,数据完全匹配。
在 SQL Server 中,字节为 0xE625,在 Oracle 中为 0x25E6。
为什么它们的顺序不同,是否有可靠的方法将一个转换为另一个以确保另一端的校验和与具有多字节字符的字符串匹配?
我喜欢在旅途中查找丢失的索引,查看执行计划!
如果我想改进当前正在运行的东西,它可能会给我一个进一步的指示。
为此,我使用以下查询:
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) 我有一个表格,里面有一些希腊文本行,如nvarchar(2000)
.
最近,我将列的类型更改为 ,varchar(4000)
但我意识到一些希腊字符显示为问号。
所以,我试图改回以nvarchar(4000)
修复它,因为我认为字符的 unicode 仍然保持不变。
我只是想知道,有没有办法解决这个问题,而不是在更改表之前恢复我创建的备份?
嗯,这个问题是众所周知的,但如果有的话,我正在寻找一个更聪明的解决方案。
出于某种原因,系统无法识别某些字符,我无法比较列
下面是一个文本示例:
对
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) 如果我只使用 ASCII 字符,磁盘上的VARCHAR (255)
withutf8mb4_0900_ai_ci
会比VARCHAR (255)
使用 ASCII 大吗?
encoding ×10
collation ×7
sql-server ×6
unicode ×5
postgresql ×2
alter-table ×1
azure ×1
bulk-insert ×1
hadoop ×1
hashing ×1
import ×1
mysql ×1
mysql-8.0 ×1
oracle ×1
t-sql ×1
utf-8 ×1
xml ×1