1

我有一个表,只有一个名为“tag”的字段,它是一个 varchar(250)

该字段是用排序规则“latin1_spanish_ci”定义的,因为我打算用西班牙语保存单词......

问题是以下查询

select * from test where tag = 'unó'

给了我完全相同的结果

select * from test where tag = 'uno'

也就是说,对于 mysql,'uno' = 'unó'... 和 'unò' 和 'unö'... 等等...

这个字段应该有一个唯一的键......

我尝试了其他排序规则,所有“bin”排序规则似乎都有效,而且 latin1_general_ci 也...

我只是想知道这是否是为数据库中的每个字段选择的适当排序规则,或者如果我在选择它时可能会遇到任何问题...考虑到我打算将西班牙数据存储在该数据库中...

萨卢多斯

sas

ps:无论如何,在西班牙语排序规则中,口音可能被认为是毫无意义的,这似乎真的很奇怪......

--

编辑:我做了几个测试,我用á é É ñ Ñ等输入数据,看起来mysql真的可以处理它们......

4

4 回答 4

2

您可以将latin1_general_ci其用作默认的数据库/表/列排序规则,并latin1_spanish_ci在需要时按选择指定:

select * from test order by tag collate latin1_spanish_ci;
select * from test where tag = 'uno' collate latin1_spanish_ci;

因为 'o'、'ó' 等在 中被认为是相等的latin1_spanish_ci,所以如果表包含例如 'uno'、'unó' 和 'unò',则后一条语句将返回多个结果。

于 2010-02-09T21:21:39.567 回答
1

排序规则不用于定义列中的数据使用哪种语言。它用于定义不同字母或多个字母/代码点必须如何定义为相同的比较(排序和相等)。

ci后缀latin1_spanish_ci表示不区分大小写

如果您希望能够区分任何重读字母和任何大小写,则以语言名称命名的排序规则是不合适的。改用带_bin后缀的排序规则。

您还可以将特定排序规则附加到值以强制在列的排序规则上使用特定排序规则:

SELECT * FROM test WHERE tag = ('uno' COLLATE latin1_bin);
于 2017-12-11T18:11:17.747 回答
0

您可以使用 UTF-8 排序规则来区分值。

于 2010-01-08T04:53:23.680 回答
0

这是此问题的快速解决方案。

'unó' 应该ó在您的数据库中保存为 'un ​​'。

然后你的搜索应该看起来像

SELECT * from database where field = 'un ó'

使用 UNICODE HTML ENTITY 是关键https://www.compart.com/en/unicode/U+00F3 ... 干杯!

于 2018-12-03T23:18:42.927 回答