AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[unicode](dba)

Martin Hope
r0tt
Asked: 2021-08-27 22:25:02 +0800 CST

Datapump metadata-only import 在使用转换导入时更改数据长度

  • 1

数据泵元数据仅在通过转换导入时更改数据长度:(以 WE8ISO8859P15 完成导出,以 AL32UTF8 字符集和 AL16UTF16 NCHAR 字符集完成导入)

示例表:Source-SYSTEM (WE8ISO8859P15):

select OWNER,TABLE_NAME,COLUMN_NAME,DATA_LENGTH from dba_tab_columns where TABLE_NAME='STRING';

OWNER TABLE_NAME COLUMN_NAME DATA_LENGTH
--------------- -------------------- -------------------- -----------
SCHEMA_NAME STRING DE 2000

目标系统(AL16UTF16):

select OWNER,TABLE_NAME,COLUMN_NAME,DATA_LENGTH from dba_tab_columns where TABLE_NAME='STRING';

OWNER TABLE_NAME COLUMN_NAME DATA_LENGTH
--------------- -------------------- -------------------- -----------
SCHEMA_NAME STRING DE 4000

varchar2(char 2000) 的数据长度已自动更改为 varchar2(char 4000)。这种行为的规则是什么?这是记录在案的行为吗?

编辑:这个问题似乎与数据泵无关,而是与从单字符到多字符集的转换有关:

源系统(WE8ISO8859P15):

create table test(name varchar2(50), name2 varchar2(5 char), name3 clob);

INSERT INTO test VALUES('Susanne','Test','Hi This is Row one');

select owner,TABLE_NAME, COLUMN_NAME, DATA_LENGTH, CHAR_LENGTH, data_type,char_used FROM ALL_TAB_COLUMNS where TABLE_NAME='TEST';
SCHEMA_NAME TEST    NAME    50  50  VARCHAR2    B
SCHEMA_NAME TEST    NAME2   5   5   VARCHAR2    C
SCHEMA_NAME TEST    NAME3   4000    0   CLOB    

目标系统(AL16UTF16):

create table test(name varchar2(50), name2 varchar2(5 char), name3 clob);

INSERT INTO test VALUES('Susanne','Test','Hi This is Row one');

select owner,TABLE_NAME, COLUMN_NAME, DATA_LENGTH, CHAR_LENGTH, data_type,char_used FROM ALL_TAB_COLUMNS where TABLE_NAME='TEST';
SCHEMA_NAME TEST    NAME    50  50  VARCHAR2    B
SCHEMA_NAME TEST    NAME2   20  5   VARCHAR2    C
SCHEMA_NAME TEST    NAME3   4000    0   CLOB    

注意:在旧数据库(字符集 = WE8ISO8859P15)中,对于所有具有 VARCHAR2 DATA_TYPE(独立于 CHAR_USED)的列,DATA_LENGTH=1*CHAR_LENGTH。

在新数据库(使用 UNICODE 字符集 AL32UTF8)中,对于所有具有 VARCHAR2 DATA_TYPE 和 CHAR_USED=C 的列,DATA_LENGTH=4*CHAR_LENGTH(或最大值 = 4000)。

oracle unicode
  • 1 个回答
  • 36 Views
Martin Hope
Arya
Asked: 2020-11-26 23:48:10 +0800 CST

实体关系的 unicode 符号

  • 1

与实体关系图中使用的符号最密切相关的 Unicode 符号是什么,例如此处 OP 屏幕截图中的符号:https ://stackoverflow.com/questions/1755591/many-to-many-relationships - 与关系上的附加数据?

显示数据时,我想为其表所代表的实体关系的 Unicode 表示添加前缀。

“ many-to- one”实体关系分别使用看起来几乎像“ >o-to- ⧺”的符号,但是......

  • 实际的many符号,如屏幕截图和一些数据库书籍中一样,有一个额外的字形,看起来像“>”符号的删除线,几乎像->,但-附加到>像第三个叉子上,不像这里那样分开->.
  • 实际one符号似乎是⧺我在写这篇文章时发现的 (U+29fa = Double Plus) 字符,但我不知道这是否是实际正确的符号,但它看起来非常接近。够接近了吧,我猜。

我已经收集了几个 Unicode 图表,比如这个用于many符号的图表,但还没有找到。

unicode
  • 2 个回答
  • 613 Views
Martin Hope
James
Asked: 2020-09-04 03:09:29 +0800 CST

如何通过 PostgreSQL `SIMILAR TO` 表达式对 Unicode 字符进行模式匹配?

  • 0

在 PostgreSQL 数据库中,我有一个名为metaidtype的列,其值包含XML 1.0 标准第三版中text指定的数字:

Digit ::= [#x0030-#x0039] | [#x0660-#x0669] | [#x06F0-#x06F9] | [#x0966-#x096F] | [#x09E6-#x09EF] | [#x0A66-#x0A6F] | [#x0AE6-#x0AEF] | [#x0B66-#x0B6F] | [#x0BE7-#x0BEF] | [#x0C66-#x0C6F] | [#x0CE6-#x0CEF] | [#x0D66-#x0D6F] | [#x0E50-#x0E59] | [#x0ED0-#x0ED9] | [#x0F20-#x0F29]

在PostgreSQL for SIMILAR TOexpression的文档中,没有提到按范围匹配此类 Unicode 字符。

我需要对CHECK列进行约束,以确保输入值的模式符合所需的格式。

我怎样才能做到这一点?

postgresql unicode
  • 1 个回答
  • 339 Views
Martin Hope
Banu Akkus
Asked: 2020-04-30 06:40:42 +0800 CST

LIKE 不支持 PostgreSQL 非确定性排序规则

  • 6

我正在使用 Postgresql v12。我创建了这样的排序规则:

CREATE COLLATION ci (provider = icu, locale = 'tr_TR', deterministic = false);

我在表格中使用了该排序规则:

create table testtable1 (
    id serial  primary key,
    name text  COLLATE "ci"
);

我插入了样本数据:

insert into testtable1 values(3,'abc');

当我使用 查询该表时LIKE,它返回以下错误:

select name from testtable1 WHERE name LIKE '%a%'  

错误:LIKE SQL 状态不支持非确定性排序
规则:0A000

但我需要使用LIKE. 有没有办法允许这样做?

collation unicode
  • 1 个回答
  • 4928 Views
Martin Hope
Boezie
Asked: 2017-11-29 04:43:38 +0800 CST

使用 LIKE 在语言特定字符上搜索不区分大小写 (PostgreSQL)

  • 1

使用 PostgreSQL 数据库(排序规则 C,编码 UTF8),我们存储来自各种语言的数据。这意味着我们还可以免费获得特殊字符(例如 Å、å、...)

在应用程序中,我们现在要执行不区分大小写的搜索。这意味着如果用户在搜索框中键入“Å”,则查询还必须考虑“å”。
但是,使用 lower(string) 或 upper(string) 方法在转换时完全忽略此值。因此,没有找到匹配的记录...

有没有办法解决?
使用正则表达式似乎可以使用 \p{L} 来比较值,但我需要在查询级别使用它,所以我猜这是不行的。

附带说明:我们使用 Hibernate 来创建查询。

postgresql unicode
  • 1 个回答
  • 2482 Views
Martin Hope
Dave
Asked: 2015-10-13 12:38:46 +0800 CST

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

  • 5

我们有一个 SQL Server 2012 Enterprise 实时事务数据库,现在每月增长超过 1G,并且正在成为我们的一个大小问题。目前为23G。字符类型字段都是 Unicode,我计算出仅将 2 个这样的字段平均每个 206 个字符转换为非 Unicode 节省了 5G 空间,如果我们将其中的一些从 nchar 和 nvarchar 转换为 char 和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) 的两个主要字段执行“添加新列、设置 new=old、删除旧的、将旧的重命名为新的”,这花了 81 分钟我们的测试服务器(4 个虚拟核心,8G 内存)在磁盘空间用完之前即使磁盘上还剩下 8G,并且数据库设置了无限大小(无法为对象'dbo.abc'分配空间。'PK_xyz'在数据库 'xxx' 中,因为 'PRIMARY' 文件组已满)。在收到磁盘警告后,我确实在完成之前删除了一个旧数据库,所以它可能没有计算那个新空间。不管它太慢了。这只是这些列中最大的两个(1260 万行),并且只占用 2% 到 3% 的 CPU 忙,因此看起来效率不高,并且如果我们要转换这两个字段甚至更不用说任何其他字段,则表示不可接受的停机时间。这两个字段的平均字段大小仅为 206 个字符或 412 个字节。我打算尝试的另一种技术是在新模式中创建新表 def,从旧表中选择它,然后在模式之间移动表并删除旧表。我在桌面上有一个 FK 和索引要处理。我打算尝试的另一种技术是在新模式中创建新表 def,从旧表中选择它,然后在模式之间移动表并删除旧表。我在桌面上有一个 FK 和索引要处理。我打算尝试的另一种技术是在新模式中创建新表 def,从旧表中选择它,然后在模式之间移动表并删除旧表。我在桌面上有一个 FK 和索引要处理。

  2. 如果我弄清楚如何在可接受的维护窗口内有效地执行#1,那么进行一次性收缩并最终得到有组织/重建的索引和更新的统计信息的最安全做法是什么?我理解不进行常规收缩的逻辑,有时它实际上可以增加尺寸。

  3. 是否有任何第三方工具可以进行备份并将其恢复到具有修改后的字段定义或以其他方式转换某些字段类型的新数据库中?

欢迎提出任何建议和最佳实践。

谢谢,戴夫

sql-server-2012 unicode
  • 2 个回答
  • 311 Views
Martin Hope
Saeed Neamati
Asked: 2015-05-06 02:03:24 +0800 CST

为什么这些字符在 SQL Server 中都是相等的?

  • 20

我只是不明白。请参阅此 SQL 查询:

select nchar(65217) -- ﻁ
select nchar(65218) -- ﻂ
select nchar(65219) -- ﻃ
select nchar(65220) -- ﻄ
if nchar(65217) = nchar(65218)
    print 'equal'
if nchar(65217) = nchar(65219)
    print 'equal'
if nchar(65217) = nchar(65220)
    print 'equal'

基于传递关系,这意味着 SQL Server 认为它们都是同一个字符。

但是,在其他环境中,例如 C#,它们并不相同。

我感到困惑的是:

  1. 字符串比较在 SQL Server 中的工作原理
  2. 为什么比较在一台机器和一个平台上的行为不同,但在不同的环境下
  3. 这 4 个字符代表一个人类可以理解的字符。为什么它们在 Unicode 字符映射中如此丰富?

这当然会导致巨大的问题,因为我正在开发一个文本处理应用程序,数据几乎来自任何地方,我需要在处理之前对文本进行规范化。

如果我知道差异的原因,我可能会找到处理它的解决方案。谢谢你。

sql-server unicode
  • 2 个回答
  • 3629 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve