问题标签 [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.
java - 在 Java 中使用 MySQL 排序规则
简洁版本
我目前正在研究 MySQL 排序规则的问题以及它们如何影响一组值(使用 Hibernate 映射,但现在应该不重要)。我想拥有一组使用与 MySQL 使用相同的排序规则的字符串。例如,我希望“foobar”和“fööbar”被认为是相等的,但“foo bar”和“foobar”被认为是不同的。使用默认Collator.getInstance()(具有Collator.PRIMARY强度)不能可靠地工作,因为仍然存在差异(最明显的是空格)。那么如何为每个可能的 String 获得一个与 MySQL 表现相同的 Collator?
长版
我想在存储 Set 值的表上有一个唯一索引,并确保 Set 仅包含数据库中允许的值,反之亦然。
表如下所示:
现在,如果我使用普通字符串和 HashSet 来保存我的值,例如
可以将“foobar”和“fööbar”都添加到值集中。现在,如果 Hibernate 将 Set 刷新到 DB,MySQL 将抱怨“foobar”和“fööbar”对定义的“实体值”键重复。因此,我想我包装字符串并使用Collator来检查字符串是否相等:
这适用于 "foobar" 和 "fööbar":
但不适用于 MySQL 认为不同的“foo bar”和“foobar”:
基本上剩下要做的就是实现getCollator()方法:
示例的完整代码可用:下载
php - 使用 php 和 mysqli 保存到 mysql 数据库
我正在尝试将数据保存到数据库中,但我得到了一个我从未见过的错误,我有预感它与 db 排序规则有关,但我不确定出了什么问题,
这是查询:
我得到的错误信息是:
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '://www.something/here/here/here/12345,httpwwwsomthighere' 附近使用正确的语法
此字段的数据库排序规则为 utf8-general-ci,字段类型为 varchar 255
有什么想法吗?
database - Hibernate 不区分大小写的 utf-8/unicode 排序规则,适用于多个 DBMS
我正在寻找 Hibernate 注释或 .hbm.xml,它允许我将表列指定为不区分大小写的字符串,以 unicode/utf-8/locale-independent 方式工作,适用于多个数据库引擎。
有没有这样的事情?
这样我就可以Restrictions.eq("column_name", "search_string")
有效地进行查询。
sql - SQL Server:列排序规则对 T-SQL 指令的影响
我今天发现(*),根据服务器,我的 TSQL 命令区分大小写,这意味着,当一个表的列被命名tableId
时,以下指令可能不会成功:
取决于列的排序规则。SQL_Latin1_blablabla
似乎不区分大小写,什么时候Latin1_blablabla
是。
所以我的第一个问题是为什么!!!
第二个是:更改数据库中所有相关列的所有排序规则的最快技巧(sp?)是什么?
编辑:让事情变得非常清楚:
同时在所有服务器上工作
SQL_Latin_blablabla
仅适用于具有排序规则的服务器。注意 2 个字符串之间的区别。我们在这里讨论的不是数据整理,而是这种整理对我们编写代码方式的影响!
(*)我可以在这里使用一些额外的和特定的词来限定我在这个“发现”之后的心态,但所有这些都是成人级别的......
sql-server - 等于操作 Sql Server 2000 的 COLLATION 冲突
我在尝试运行以实时发送它的存储过程中存在排序规则冲突...已在此处进行了解释
SQL Server 2000 DTS - 无法解决等于操作的排序规则冲突
有没有办法解决这个问题,而不用在每个问题旁边写 COLLATE database_default 等于比较并执行某种全局命令或设置?或者在生成脚本以预先完成排序标签时可能有一些选项?
sql-server - 允许特殊字符 SQL Server 2008
我正在使用 SQL Server 2008 速成版,其排序规则设置设置为默认值。我希望在我的数据库中存储特殊字符,如 á ,â ,ã ,å ,ā ,ă ,ą ,ǻ 但它将它们转换为普通字符,如'一个'。如何阻止 SQL Server 这样做?
perl - Perl 的“标准字符串比较顺序”是什么?
这确实是一个双重问题,我的两个最终目标有以下答案:
- 就机制而言,标准的字符串比较顺序是什么?
- 什么是更好的名称,以便我可以更新文档?
Perl 的排序文档说,没有块,sort
使用“标准字符串比较顺序”。但是这个命令是什么?它应该有一个更好的名字。对于这个问题,我特别指的是语言环境无效的情况,因为它定义了它自己的顺序。
在过去的几年里,我们通常将标准排序顺序称为“ASCIIbetically”。它在学习 Perl和许多其他书籍中。但是,该术语已过时。Perl 从 5.6 开始就支持 Unicode。谈论 ASCII 是老派。因为 Perl 也支持 Unicode,所以它知道字符串。在sv.c中,Perl_sv_cmp
了解locale
、bytes
和 UTF-8。前两个很容易。但我对第三个没有信心。
当 Perl 使用 UTF-8 进行排序时,它真正的排序是什么?字符串编码的字节,它代表的字符(可能包括标记?),还是其他?我认为这是 sv.c 中的相关行(提交 7844ec1 的第 6698 行):
如果我没看错(使用我生锈的 C),pv1
则被强制转换为八位字节,转换为 UTF-8,然后转换为字符(在 C 意义上)。我认为这意味着它是按 UTF-8 编码排序的(即 UTF-8 用来表示代码点的实际字节)。另一种说法是它不对字素进行排序。我想我几乎已经说服自己我没看错,但你们中的一些人比我更了解这一点。
由此,下一个有趣的行是 6708:
对我来说,这看起来就像曾经有pv1
和pv2
,被强制到char *
,现在只是逐字节比较,因为它们被强制到void *
。会发生这种情况吗memcmp
,看起来它只是根据我迄今为止阅读的各种文档比较位?同样,我想知道我在从 bytes->utf8->char->bytes 的旅程中缺少什么,比如可能是 Unicode 规范化步骤。Perl_bytes_to_utf8
在utf8.c中签出并没有帮助我回答这个问题。
作为旁注,我想知道这是否与Unicode Collation Algorithm相同?如果是,为什么Unicode::Collate存在?从表面上看,我不认为 Perlsort
处理规范等价。
mysql - 将 MySQL 表从 Latin1 转换为 UTF8 时缺少整理信息
我正在转换一个现有的表,例如:
使用以下命令转为 utf8:
这似乎工作正常,但结果表不包含任何排序规则信息:
所以我的问题是,缺少整理信息会是个问题吗?我搜索了谷歌,但在任何地方都找不到提到这一点。我对 collate 标志的理解非常基本(我认为在比较字符串函数中的字符时它在某种程度上很重要?)
谢谢
nhibernate - 流畅的nhibernate排序规则冲突
真的很难解决这个问题。使用 nhibernate 我试图从两个不同的数据库连接两个不同的表,但我得到一个排序规则冲突错误。
为了解决这个问题,我知道我需要将“collate Latin1_General_CI_AS”附加到我的 sql 字符串的末尾,但不知道如何使用 nhibernate 来做到这一点。
错误:
一段时间以来一直在寻找解决方案,但没有任何真正的快乐。我觉得这将是一个简单的配置更改。我想也许我可以覆盖 IQuery 中的一些字符串函数以将“collate Latin1_General_CI_AS”附加到 sql 的末尾,但找不到任何明显的东西。
nhibernate 失败的 sql 在 ms sql 2005 管理工作室中失败,但如果我附加整理,则运行并返回结果。
任何帮助都会得到很大的帮助。
非常爱c