Php 在数据库的唯一列中存储全半角字符和全半角字符

Php 在数据库的唯一列中存储全半角字符和全半角字符,php,mysql,sql,Php,Mysql,Sql,我在mysql中存储了一个单词列表,大小约为10000个单词。该列被标记为唯一。但是,我不能插入标点符号的全半角字符。 以下是一些示例: (half-width, full-width) ('?', '?') ('/', '/') 目的是,我有很多文章同时包含全半角字符和全半角字符,我想知道这些文章是否包含这些单词。我使用php进行比较,它可以知道“?”与“?”不同。有没有办法在mysql中也这么做?或者是否有一些方法可以让php使其平等 我使用utf8\uUnicode\uCI进行数据库编码

我在mysql中存储了一个单词列表,大小约为10000个单词。该列被标记为唯一。但是,我不能插入标点符号的全半角字符。
以下是一些示例:

(half-width, full-width)
('?', '?')
('/', '/')
目的是,我有很多文章同时包含全半角字符和全半角字符,我想知道这些文章是否包含这些单词。我使用php进行比较,它可以知道“?”与“?”不同。有没有办法在mysql中也这么做?或者是否有一些方法可以让php使其平等

我使用utf8\uUnicode\uCI进行数据库编码,该列也使用utf8\uUnicode\uCI进行编码。当我进行这些查询时,两者都返回相同的记录'?測試'

SELECT word FROM word_list WHERE word='?測試'
SELECT word FROM word_list WHERE word='?測試'

最可能的解释是字符集翻译问题;例如,将值存储到的列定义为拉丁字符集

但引起问题的不一定是该列的字符集。这是某个地方发生的字符集转换

如果您不知道字符集编码,我建议您咨询所有知识的来源:谷歌

我强烈推荐此搜索的两个热门搜索:

what every programmer needs to know about character encoding


表上的字符编码是什么\db?我使用utf8\U unicode\U ci编码。我使用utf8\U unicode\U ui存储单词列表。知道问号和斜杠的半宽、全宽就足够了。有些字符在排序方面被认为是相等的,即使二进制表示不同,它们也被认为是“相等的”。这将导致“重复密钥”异常,就像您正在报告的一样。您可能需要指定不同的排序规则,如二进制排序规则,以便将字符视为“不等”。