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


Store full width and half width character in unique column of database

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

(half-width, full-width)
('?', '?')
('/', '/')

目的是,我有很多文章同时包含全角和半角字符,我想知道这些文章是否包含这些单词。我使用php进行比较,它可以知道"?"与"?"不同。在mysql中也有什么想法吗?或者有没有一些方法可以让php让它变得平等?

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

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

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

但引起问题的不一定是专栏的特点。这是发生在某个地方的字符集转换。

如果你不知道字符集编码,我建议你查阅所有知识的来源:谷歌。

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

what every programmer needs to know about character encoding

http://www.joelonsoftware.com/articles/Unicode.html

http://kunststube.net/encoding/