mysql - mySQL 中的非法混合排序规则

标签 mysql character-encoding collation

我需要将一个列从一个表转移到另一个表。源表具有与目标表不同的排序规则(latin1_general_ci 和 latin1_swedish_ci)。

我用

UPDATE target 
LEFT JOIN source ON target.artnr = source.artnr 
SET target.barcode = source.barcode

我得到一个“非法的归类组合”。

有什么快速修复方法可以在不更改任何一个表的情况下使它正常工作?我尝试使用 CONVERT 和 COLLATE 以 UTF-8 运行整个操作,但这没有帮助。 “条形码”仅包含数字数据(即使它们都是 VARCHAR),因此无论哪种方式都不用担心排序规则。我只需要这样做一次。

Edit: I sorted it using a CAST(fieldname as unsigned) on every field involved. I was able to do that in this case because only numeric data was affected, but it would be nice to know a more general approach to this, so I am leaving the question open.

最佳答案

I tried CONVERT and COLLATE to run the whole operation in UTF-8, but that didn't help.

这让我很烦恼,所以今天我创建了这些表并成功运行了这个表:

UPDATE target
LEFT JOIN  source ON( target.artnr = source.artnr COLLATE latin1_swedish_ci )
SET target.barcode = source.barcode

关于mysql - mySQL 中的非法混合排序规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2327778/

相关文章:

MySQL 不区分大小写但区分重音 UTF8 唯一键

sql - 确定带时间戳记录的每月值

php - 准备好的语句中的 Pdo 参数错误

php - Yii2 用户模型与关系表

php - MySQL/PHP 更新语句输出白页无错误

javascript - 将unicode转为汉字

java - 越南语的 JSP 字符集编码无法正确显示

代码点索引的 Java 子字符串(将代理代码单元对视为单个代码点)

php - SQL 查询对非拉丁字符不敏感?

PHP + MySQL + 西类牙语