我需要从php数组中插入字符串(unicode words)到mysql表中,但我不需要重复的值 在php中无法检查重复项,因为单个单词来自各种来源的爆炸文本,而某些单词可能与之前插入的单词相同
对于每个单词,我还需要在同一列中插入ASCII版本,但前提是unicode单词与ASCII转换单词不同
在mysql中,我有一个表'words',有两列:
'id'PRIMARY和'word'UNIQUE(utf8mb4_general_ci)
$sql = "
INSERT INTO ´words´ (´word´) VALUES ('$word')
ON DUPLICATE KEY UPDATE
SET ´word´ = '$word'
";
$query->execute();
//ex: if $word = "peter" and $word_ascii = "peter" do not insert $word_ascii
//but if $word = "julià" and $word_ascii = "julia" inert also $word_ascii
if($word != $word_ascii){
$sql = "
INSERT INTO ´words´ (´word´) VALUES ('$word_ascii')
ON DUPLICATE KEY UPDATE
SET ´word´ = '$word_ascii'
";
$query->execute();
}
但是在这种模式下,当我尝试插入$ word_ascii =“julia”时,覆盖我之前插入的“julià”(由于UNIQUE索引和ON DUPLICATE KEY UPDATE)
如果我退出UNIQUE索引,那么会有很多重复的条目。
我试过了:
INSERT IGNORE(有和没有UNIQUE),
更换......但仍然是同样的问题。
我也尝试过这个旧答案中的IF NOT EXIST:How to 'insert if not exists' in MySQL?
INSERT INTO ´words´ (´word´) VALUES ('$word')
WHERE NOT EXISTS (SELECT * FROM ´words´ WHERE ´word´ = '$word' LIMIT 1);
但不成功。我遇到了语法错误。
欢迎任何帮助
答案 0 :(得分:1)
utf8mb4_general_ci
,“julià”和“julia”被认为是平等的。
一种可能的解决方案是将word
的排序规则更改为utf8_bin
。然后INSERT IGNORE
将按预期工作,您将获得两行,一行“julià”,一行“julia”。
你想把“julià”映射到“julia”吗?
但是你的问题可能还有更多 - 你会不会用中文包括中文名字以及如何拼写英文字母?整理是不够的。