mysql - 如何在不丢失或更改数据的情况下更改列排序规则?

标签 mysql sql database character-encoding collation

我一直在使用 mysql 版本 5.5.41,但遇到了一个问题。 我将表中特定列的排序规则从 latin1_swedish_ci 更改为 hebrew_bin,这会更改该列中的数据。例如,我在字段中插入了 école,在转换时,我得到了 ?cole。 所以我搜索了一个解决方案并找到了this .您可以看到它指出,为了在更改字符集和排序规则时不丢失数据,您必须先转换为 blob,然后再转换为所需的字符集。我也试过了,只是为了得到 əcole。那么如何在不丢失数据的情况下更改列排序规则。

这些是我对 blob 尝试的查询:-

ALTER TABLE `something` CHANGE `name` `name` BLOB;
ALTER TABLE `something` CHANGE `name` `name` VARCHAR(12) CHARACTER SET hebrew COLLATE hebrew_bin NOT NULL;

最佳答案

请执行 SELECT HEX(col), col FROM ... 以查看为“école”存储的内容。 Latin1 看起来像 E9636F6C65。希伯来语,如果我没记错的话,不包括“é”。参见 http://collation-charts.org/mysql60/mysql604.hebrew_general_ci.html可能是支持的完整字符集。

假设这是正确的,不要尝试转换为 CHARACTER SET hebrew;你会丢失信息,比如 'é' 变成了 '?'。

如果您需要同时存储希伯来语字符和法语重音字符(等),请使用 utf8。

关于mysql - 如何在不丢失或更改数据的情况下更改列排序规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29067703/

相关文章:

python - 如何使用 Python 在 AWS Lambda 上运行 SQLAlchemy

mysql - 在 MySQL 中,为什么在使用未提交读时从 select 设置变量会获取锁?

mysql - 仅根据 2 列计算重复行

MySQL - 不断寻找员工的上级,直到找到最优秀的员工

database - 基于文件的存储系统

mysql - 比较字符串长度相等

mysql - 查询优化以查找随机样本

c# - 更新满足 datediff 约束的所有行的 int 列?

php - 如何在 php/adodb 中读取大于 255 个字符的字符串?

java - 序列生成的主键的正确大小是多少?