我想在 SQL 查询中进行区分大小写的搜索。但默认情况下,MySQL 不考虑字符串的情况。
关于如何在 SQL 查询中进行区分大小写的搜索的任何想法?
越南语校对中的“tR”似乎有一些特别之处。知道的人能不能用简单的语言解释一下,不胜感激。此问题是在“越南语”整理的 SQL Server 上安装我们的产品期间发现的。模式中的一个表的名称中包含“tR”,但存储过程正在以所有小写的“tr”引用该表。而这个参考失败了。
我想这种情况类似于“?” 匹配其他排序规则中的“ss”。
这是一个复制品:
select case when 'tr' = 'tR' COLLATE SQL_Latin1_General_CP1_CI_AS then 'match' else 'no match' end
select case when 'tr' = 'tR' COLLATE Vietnamese_CI_AI then 'match' else 'no match' end
select case when 'tr' = 'TR' COLLATE Vietnamese_CI_AI then 'match' else 'no match' end
Run Code Online (Sandbox Code Playgroud)
结果:
-----
match
--------
no match
-----
match
Run Code Online (Sandbox Code Playgroud)
第二个 T-SQL 产生不匹配。't' 和 'R' 的其他组合则不然。
我正在将一些代码从某些版本的 Sybase 移植到 PostgreSQL。这是一个使用 Sybase 客户端库的 C 应用程序。我的方法是编写一个翻译层,将调用转换dbsqlexec()为PQexec()(例如)。那部分主要是工作。
看来 Sybase 数据库是以区分大小写的方式设置的(关于数据库对象名称)。例如,既有WIDGET桌子又有widget桌子。看起来这个应用程序中的约定是全大写名称表示实际数据表,而小写名称在运行某些处理时用作临时表。
根据4.1 Lexical Structure,“关键字和未加引号的标识符不区分大小写。 ”我知道我可以双引号标识符来禁用自动折叠为小写,但我不想通过无数行手动执行此操作使用此数据库的代码。
有没有办法设置 PostgreSQL 来禁用数据库对象标识符的这种自动大小写折叠?
我的替代方法是编写一些代码来检查每个 SQL 语句并在每个标识符(不是关键字)周围加上双引号。
我正在尝试json_extract_path_text()使用citext模块制作不区分大小写的版本。
我希望这是一个围绕内置函数的简单包装器,唯一的区别是它接受citext作为第一个参数而不是json. 我希望这是对本机实现的直接传递,只需事先进行类型转换。这是我到目前为止所拥有的:
create extension citext;
create or replace function json_extract_path_text ( string citext, variadic params text[]) RETURNS text IMMUTABLE AS
$$
BEGIN
SELECT json_extract_path_text(string::json, params);
END;
$$
LANGUAGE 'plpgsql';
Run Code Online (Sandbox Code Playgroud)
但是,由于类型不匹配,这不能正常工作:
Run Code Online (Sandbox Code Playgroud)ERROR: function json_extract_path_text(json, text[]) does not exist LINE 1: SELECT json_extract_path_text(string::json, params) ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. QUERY: SELECT json_extract_path_text(string::json, params) CONTEXT: PL/pgSQL function json_extract_path_text(citext,text[]) line 3 …
我正在使用 Postgresql v12。我创建了一个像这样的排序规则:
CREATE COLLATION ci (provider = icu, locale = 'tr_TR', deterministic = false);
Run Code Online (Sandbox Code Playgroud)
我在表中使用了该排序规则:
create table testtable1 (
id serial primary key,
name text COLLATE "ci"
);
Run Code Online (Sandbox Code Playgroud)
我插入了示例数据:
insert into testtable1 values(3,'abc');
Run Code Online (Sandbox Code Playgroud)
当我使用 查询该表时LIKE,它返回以下错误:
select name from testtable1 WHERE name LIKE '%a%'
Run Code Online (Sandbox Code Playgroud)
错误:LIKE SQL 状态不支持非确定性排序规则:0A000
但我需要使用LIKE. 有什么办法允许这样做吗?
collation unicode case-sensitive international-components-unicode postgresql-12
我必须相信这是有原因的,但对于我的生活,我无法弄清楚。看起来任何中央管理服务器中服务器名称的排序都是区分大小写的,而不管充当 CMS 的服务器本身的排序规则如何。
附件是我的本地机器上托管的 CMS 示例,它配置了 SQL_Latin1_General_CP1_CI_AS 的服务器排序规则。CI 意思是不区分大小写。从包含 CMS 对象的系统表中进行选择时,将返回正确的顺序,但是正如您在此屏幕截图中所见,服务器在 UI 中的列出方式,顺序显然是以区分大小写的方式处理的。
由于它似乎与服务器级别无关,因此我假设它与客户端工具相关,但在工具中没有任何地方可以识别会影响此的排序规则级别(甚至区分大小写设置)。
显然,这个问题没有什么重要的,但是如果有人确实知道如何强制用户界面不区分大小写,我会很感激,因为我喜欢将我的服务器名称命名为 Camel Case,这会影响排序。
目前我正在试图创建一个表,一个文本列将比较案例在默认情况下是敏感的。这是因为我们有一个第三方程序可以对我们的数据库执行搜索。该SELECT程序使用的语句不能更改。
抽象的问题是我们不知何故需要这个搜索不区分大小写,但它目前是区分大小写的。
我读到 Postgres 12 确实支持允许这种行为的非确定性排序规则。
我在德国 Windows 机器上安装了 Postgres 服务器(版本 PostgreSQL 12.1,由 Visual C++ build 1914 编译,64 位)。
因此,出于测试目的,我创建了一个新数据库进行测试:
CREATE DATABASE collation_test
WITH
OWNER = postgres
ENCODING = 'UTF8'
CONNECTION LIMIT = -1;
Run Code Online (Sandbox Code Playgroud)
在这个数据库中,我创建了以下排序规则,我在一篇关于这些排序规则的文章中找到了
CREATE COLLATION collat_ci (
provider = 'icu',
locale = 'und-u-ks-level2',
deterministic = false
);
Run Code Online (Sandbox Code Playgroud)
在此之后,我需要一个表来测试这个排序规则
CREATE TABLE public.person
(
"Id" bigint NOT NULL,
"Name" text COLLATE public.collat_ci,
PRIMARY KEY ("Id")
);
ALTER TABLE public.person
OWNER to postgres;
INSERT …Run Code Online (Sandbox Code Playgroud) 将 MySQL 数据库从 Windows 迁移到 Linux 我有一个问题,即在 Linux 上表的名称区分大小写。这是一个问题,因为我正在开发的 Java 应用程序找不到表。
我已经更改了我的/etc/mysql/my.cnf文件添加行:
lower_case_table_names=1
但这并没有改变任何事情。
我的服务器版本是:
5.1.61-0ubuntu0.11.10.1 (Ubuntu)
如何配置 MySQL 以忽略表名中的大小写?
有没有办法强制所有文本数据为大写,而不必重复为每个表编写函数或在客户端执行?
我正在尝试从 Postgres 9.4 转储模式,在 Cents 6.5 上运行,但出现错误:
pg_dump:找不到匹配的模式
这是我正在运行的命令:
pg_dump -U postgres -n "OLD-TODELETE-bushes" --verbose site > output_nf
Run Code Online (Sandbox Code Playgroud)
我对此有点困惑,因为当我运行时select schema_name from information_schema.schemata,我可以看到架构名称。
如果我为所有模式运行 pg_dump,则按OLD-TODELETE-bushes预期将其转储到文件中。
Postgres 日志中没有错误。
谁有想法?
case-sensitive ×10
postgresql ×5
collation ×3
mysql ×2
sql-server ×2
unicode ×2
array ×1
functions ×1
international-components-unicode ×1
linux ×1
localization ×1
mysql-5 ×1
mysql-5.1 ×1
parameter ×1
pg-dump ×1
select ×1