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

时间:2015-02-20 03:31:52

标签: php mysql sql

我有一个存储在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='?測試'

1 个答案:

答案 0 :(得分:2)

最有可能的解释是角色翻译问题;例如,您将值存储到的列定义为latin1 characterset。

但它不一定是导致问题的专栏的字符集。这是在某处发生的角色转换。

如果您不了解字符编码,我建议您咨询所有知识来源:google。

我强烈推荐这次搜索的两个热门点击:

what every programmer needs to know about character encoding

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

http://kunststube.net/encoding/