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

标签 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='?測試'

最佳答案

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

但引起问题的不一定是列的字符集。这是在某处发生的字符集转换。

如果您不了解字符集编码,我建议您查阅所有知识的来源:google。

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

what every programmer needs to know about character encoding

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

http://kunststube.net/encoding/

关于php - 将全角和半角字符存储在数据库的唯一列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28621199/

相关文章:

php - 如何提高频繁插入率的MySQL查询性能?

mysql - 将 csv 导入 phpmyadmin

php - 无效的数据源名称 - PDO

mysql - 让 mySQL MONTH() 使用前导零?

mysql - ERROR 1064 (42000) - 找不到 SQL 查询中的错误

php - 我的 nginx + php-fm 网络服务器能够为具有权限 000 的网页提供服务。为什么?

php - codeigniter View 中的非法字符串偏移错误

php - PDO准备好的语句是否足以防止SQL注入(inject)?

sql - 在单个 SQL 查询中返回 json 层次结构

sql - 根据表中的差距和年份值获取年份值列表