我在将数据从SQL服务器迁移到MySQL时遇到问题。我在 SQL server 中有 nvarchar 列,并将它们导出为Unicode文本文件。但是当我将列导入到 MySQL 的utf-8表中时,我得到一个重复值的错误:Mysql看到'Kaneko,Shûsuke'和'Kaneko,Shusuke'之间没有区别。我试图将这些值放入一个独特的列中。
怎么了? 我必须在MySQL中使用另一个字符集吗?
我还尝试在导入MySQL之前将文本文件转换为utf8,但仍然遇到同样的错误。
答案 0 :(得分:0)
似乎是Mysql表创建中的问题。首先在mysql提示符上使用SHOW CREATE TABLE
并查看其表结构。你有没有使用正确的charset和整理。你可以在这里阅读mysql docs
很多时候,校对确实不仅不区分大小写,而且部分区分重音不敏感,所以ñ= n。 (正如Joni Salonen指出的那样,这是不正确的!)但是á = a.
所以我们可以使用二进制排序规则,但它有自己的缺点。二进制排序规则比较你的字符串与C中的strcmp()相比,如果字符不同(无论是大小写还是变音符号差异)。它的缺点是排序顺序不自然。
非自然排序顺序的一个例子(如“二进制”中所示):A,B,a,b在这种情况下,自然排序顺序例如:A,a,B,b(污染的小和资本变化字母彼此相邻排列)
二进制整理的实际优势在于其速度,因为字符串比较非常简单/快速。在一般情况下,具有二进制的索引可能不会产生排序的预期结果,但是对于完全匹配,它们可能是有用的。 对特定列使用二进制排序规则(可能是您最好的选择)
对于ex-
drop table cc;
CREATE TABLE cc ( c CHAR(100) primary key ) DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
insert into cc values ( 'Kaneko, Shûsuke' );
insert into cc values ( 'Kaneko, Shusuke' );