Mysql 表排序规则改变
Posted
技术标签:
【中文标题】Mysql 表排序规则改变【英文标题】:Mysql table collation change 【发布时间】:2020-02-13 06:06:37 【问题描述】:我有一个带有几个西班牙关键字的旧表。它的排序规则是 latin1_swedish_ci。
包含关键字的列具有主索引。
当我尝试将排序规则更改为 utf8_general_ci 时,这是不可能的,因为如果发现重复项。
使用该索引是不可能的。
发生的情况是,例如,“cañada”被视为已经存在的“canada”,但它们是不同的词。
那是使用 phpMyAdmin。
另一种尝试是将表导出为 file.sql 并使用sed 's/STRING_SOURCE/STRING_REPLACE/'
但最后mysql源给了我同样的错误(确实期望:))
我还尝试使用整个数据库进行最后一个。
MySQL 版本 5.5.64-MariaDB phpMyAdmin,选择数据库/表,选项卡结构,选择关键字的列更改,最后从下拉排序规则中选择ut8_general_ci
如何在保留所有关键字的情况下进行此更改?
【问题讨论】:
您很可能需要 utf8mb4_unicode_as 或更好的版本(utf8mb4_0900_as 如果您的 MySQL 版本支持它)。 嗯,我刚刚测试了你描述的过程,我没有遇到问题。您使用的是什么版本的 MySQL。您能准确描述一下您是如何更改排序规则的吗? Why should I provide a Minimal Reproducible Example for a very simple SQL query? @Lunc Change fo utf8mb4_unicode_ci (not _as) 成功,没有重复的错误输出 @dstonek - 你确定 utf8mb4_unicode_ci 吗? 【参考方案1】:由于您专注于西班牙语,请使用西班牙语排序规则,而不是通用排序规则:utf8_spanish_ci
和 utf8_spanish2_ci
。他们将ñ
视为n
和o
之间的单独字母。其他排序规则将ñ
和n
视为相同。
同时,ç=c
。
但是 ll
被 utf8_spanish_ci 视为两个 l
,而它被 utf8_spanish2_ci 视为在 lz
之后。 (关于字典与电话簿的区别——还记得古代历史中的那些文物吗?)
参考:http://mysql.rjweb.org/utf8_collations.html
升级到 8.0 后,将有另外两个选择:utf8mb4_es_0900_ai_ci
和 utf8mb4_es_trad_0900_ai_ci
。
参考:http://mysql.rjweb.org/utf8mb4_collations.html
【讨论】:
以上是关于Mysql 表排序规则改变的主要内容,如果未能解决你的问题,请参考以下文章