首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将表中的行从utf8_turkish_ci更新到utf8_general_ci会有什么影响?

将表中的行从utf8_turkish_ci更新到utf8_general_ci会有什么影响?
EN

Stack Overflow用户
提问于 2014-08-21 22:08:15
回答 1查看 162关注 0票数 3

我无法连接一些表,因为有些表/行是utf8_general_ci,有些是utf8_turkish_ci。因此,我不得不将土耳其语言转换为通用语言,并最终使用它。但是,我想知道,如果我将原始表从土耳其语转换为通用表,我的应用程序会发生什么?我在PHP中使用MySQL。

这是初始错误:Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_turkish_ci,IMPLICIT) for operation '='

EN

回答 1

Stack Overflow用户

发布于 2014-08-22 00:14:09

列的数据是使用字符集存储的。在这种情况下,它似乎是utf8。

当您对这些列进行操作(例如,进行相等比较或排序)时,MySQL将使用排序规则。每列都有一个默认排序规则,它从表的默认排序规则继承而来。

索引中内置了列的默认排序规则,因此它们可以有效地工作。

您可以进行由排序规则限定的相等比较。例如,在JOIN中,您可以指定

代码语言:javascript
复制
ON (turkish.village_name COLLATE utf8_general_ci) = euro.village_name

或者也许

代码语言:javascript
复制
ON turkish.village_name = (euro.village_name COLLATE utf8_turkish_ci)

这应该会消除非法的排序规则混合,而不需要更改表。这可能会帮助您避免您所询问的数据库更改。但要注意,使用COLLATE限定符可能会使索引的使用失败。如果您有一个很大的表,并且您依赖于索引来获得性能,那么这可能没有什么帮助。

那么,如果通过修改表来更改默认排序规则,会发生什么情况呢?

  1. 您的数据不会更改(除非您还更改了字符集)。这很好。任何涉及具有排序规则的列的索引都将是regenerated.
  2. Your比较,并且排序可能会改变。
  3. 。我不懂土耳其语,所以我不能告诉你什么可能会坏。但是,例如,在西班牙语中,字母N-是不同的。在西班牙语排序规则中,N位于-之前,但在常规排序规则中,它们被视为相同的排序规则。土耳其语字母表的某些方面可能是相同的,因此您的ORDER BY结果将是不正确的。

但是,您可以通过在ORDER BY子句中指定COLLATE修饰符来解决此问题。

代码语言:javascript
复制
ORDER BY (euro.village_name COLLATE utf8_turkish_ci)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25428529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档