问题标签 [collation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2285 浏览

java - 在 Java 中使用 MySQL 排序规则

简洁版本

我目前正在研究 MySQL 排序规则的问题以及它们如何影响一组值(使用 Hibernate 映射,但现在应该不重要)。我想拥有一组使用与 MySQL 使用相同的排序规则的字符串。例如,我希望“foobar”和“fööbar”被认为是相等的,但“foo bar”和“foobar”被认为是不同的。使用默认Collat​​or.getInstance()(具有Collat​​or.PRIMARY强度)不能可靠地工作,因为仍然存在差异(最明显的是空格)。那么如何为每个可能的 String 获得一个与 MySQL 表现相同的 Collat​​or?

长版

我想在存储 Set 值的表上有一个唯一索引,并确保 Set 仅包含数据库中允许的值,反之亦然。

表如下所示:

现在,如果我使用普通字符串和 HashSet 来保存我的值,例如

可以将“foobar”和“fööbar”都添加到值集中。现在,如果 Hibernate 将 Set 刷新到 DB,MySQL 将抱怨“foobar”和“fööbar”对定义的“实体值”键重复。因此,我想我包装字符串并使用Collat​​or来检查字符串是否相等:

这适用于 "foobar" 和 "fööbar":

但不适用于 MySQL 认为不同的“foo bar”和“foobar”:

基本上剩下要做的就是实现getCollat​​or()方法:

示例的完整代码可用:下载

0 投票
1 回答
602 浏览

php - 使用 php 和 mysqli 保存到 mysql 数据库

我正在尝试将数据保存到数据库中,但我得到了一个我从未见过的错误,我有预感它与 db 排序规则有关,但我不确定出了什么问题,

这是查询:

我得到的错误信息是:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '://www.something/here/here/here/12345,httpwwwsomthighere' 附近使用正确的语法

此字段的数据库排序规则为 utf8-general-ci,字段类型为 varchar 255

有什么想法吗?

0 投票
1 回答
1285 浏览

database - Hibernate 不区分大小写的 utf-8/unicode 排序规则,适用于多个 DBMS

我正在寻找 Hibernate 注释或 .hbm.xml,它允许我将表列指定为不区分大小写的字符串,以 unicode/utf-8/locale-independent 方式工作,适用于多个数据库引擎。

有没有这样的事情?

这样我就可以Restrictions.eq("column_name", "search_string")有效地进行查询。

0 投票
2 回答
1944 浏览

sql - SQL Server:列排序规则对 T-SQL 指令的影响

我今天发现(*),根据服务器,我的 TSQL 命令区分大小写,这意味着,当一个表的列被命名tableId时,以下指令可能不会成功:

取决于列的排序规则。SQL_Latin1_blablabla似乎不区分大小写,什么时候Latin1_blablabla是。

所以我的第一个问题是为什么!!!

第二个是:更改数据库中所有相关列的所有排序规则的最快技巧(sp?)是什么?

编辑:让事情变得非常清楚:

同时在所有服务器上工作

SQL_Latin_blablabla仅适用于具有排序规则的服务器。注意 2 个字符串之间的区别。我们在这里讨论的不是数据整理,而是这种整理对我们编写代码方式的影响!

(*)我可以在这里使用一些额外的和特定的词来限定我在这个“发现”之后的心态,但所有这些都是成人级别的......

0 投票
1 回答
2761 浏览

sql-server - 等于操作 Sql Server 2000 的 COLLATION 冲突

我在尝试运行以实时发送它的存储过程中存在排序规则冲突...已在此处进行了解释

SQL Server 2000 DTS - 无法解决等于操作的排序规则冲突

有没有办法解决这个问题,而不用在每个问题旁边写 COLLATE database_default 等于比较并执行某种全局命令或设置?或者在生成脚本以预先完成排序标签时可能有一些选项?

0 投票
2 回答
11724 浏览

sql-server - 允许特殊字符 SQL Server 2008

我正在使用 SQL Server 2008 速成版,其排序规则设置设置为默认值。我希望在我的数据库中存储特殊字符,如 á ,â ,ã ,å ,ā ,ă ,ą ,ǻ 但它将它们转换为普通字符,如'一个'。如何阻止 SQL Server 这样做?

0 投票
4 回答
61909 浏览

sql - 在 t-sql 中转换 nvarchar 变量的排序规则

我需要更改 nvarchar 变量的排序规则。通过文档

(...) 3. 可以在多个级别指定 COLLATE 子句。其中包括:

转换表达式的排序规则。您可以使用 COLLATE 子句将字符表达式应用于某个排序规则。字符文字和变量被分配了当前数据库的默认排序规则。列引用被分配列的定义排序规则。有关表达式的排序规则,请参阅排序规则优先级 (Transact-SQL)。

但是,我无法找出使用 CAST()、CONVERT() 或带有 DECLARE 的变量声明用于此目的的正确语法。

0 投票
2 回答
2244 浏览

perl - Perl 的“标准字符串比较顺序”是什么?

这确实是一个双重问题,我的两个最终目标有以下答案:

  • 就机制而言,标准的字符串比较顺序是什么?
  • 什么是更好的名称,以便我可以更新文档?

Perl 的排序文档说,没有块,sort使用“标准字符串比较顺序”。但是这个命令是什么?它应该有一个更好的名字。对于这个问题,我特别指的是语言环境无效的情况,因为它定义了它自己的顺序。

在过去的几年里,我们通常将标准排序顺序称为“ASCIIbetically”。它在学习 Perl和许多其他书籍中。但是,该术语已过时。Perl 从 5.6 开始就支持 Unicode。谈论 ASCII 是老派。因为 Perl 也支持 Unicode,所以它知道字符串。在sv.c中,Perl_sv_cmp了解localebytes和 UTF-8。前两个很容易。但我对第三个没有信心。

当 Perl 使用 UTF-8 进行排序时,它真正的排序是什么?字符串编码的字节,它代表的字符(可能包括标记?),还是其他?我认为这是 sv.c 中的相关行提交 7844ec1 的第 6698 行):

如果我没看错(使用我生锈的 C),pv1则被强制转换为八位字节,转换为 UTF-8,然后转换为字符(在 C 意义上)。我认为这意味着它是按 UTF-8 编码排序的(即 UTF-8 用来表示代码点的实际字节)。另一种说法是它不对字素进行排序。我想我几乎已经说服自己我没看错,但你们中的一些人比我更了解这一点。

由此,下一个有趣的行是 6708:

对我来说,这看起来就像曾经有pv1pv2,被强制到char *,现在只是逐字节比较,因为它们被强制到void *。会发生这种情况吗memcmp,看起来它只是根据我迄今为止阅读的各种文档比较位?同样,我想知道我在从 bytes->utf8->char->bytes 的旅程中缺少什么,比如可能是 Unicode 规范化步骤。Perl_bytes_to_utf8utf8.c中签出并没有帮助我回答这个问题。

作为旁注,我想知道这是否与Unicode Collat​​ion Algorithm相同?如果是,为什么Unicode::Collat​​e存在?从表面上看,我不认为 Perlsort处理规范等价。

0 投票
1 回答
952 浏览

mysql - 将 MySQL 表从 Latin1 转换为 UTF8 时缺少整理信息

我正在转换一个现有的表,例如:

使用以下命令转为 utf8:

这似乎工作正常,但结果表不包含任何排序规则信息:

所以我的问题是,缺少整理信息会是个问题吗?我搜索了谷歌,但在任何地方都找不到提到这一点。我对 collat​​e 标志的理解非常基本(我认为在比较字符串函数中的字符时它在某种程度上很重要?)

谢谢

0 投票
1 回答
847 浏览

nhibernate - 流畅的nhibernate排序规则冲突

真的很难解决这个问题。使用 nhibernate 我试图从两个不同的数据库连接两个不同的表,但我得到一个排序规则冲突错误。

为了解决这个问题,我知道我需要将“collat​​e Latin1_General_CI_AS”附加到我的 sql 字符串的末尾,但不知道如何使用 nhibernate 来做到这一点。

错误:

一段时间以来一直在寻找解决方案,但没有任何真正的快乐。我觉得这将是一个简单的配置更改。我想也许我可以覆盖 IQuery 中的一些字符串函数以将“collat​​e Latin1_General_CI_AS”附加到 sql 的末尾,但找不到任何明显的东西。

nhibernate 失败的 sql 在 ms sql 2005 管理工作室中失败,但如果我附加整理,则运行并返回结果。

任何帮助都会得到很大的帮助。

非常爱c