MySQL Concat中文字符返回NULL

时间:2015-09-01 15:11:43

标签: mysql character-encoding string-concatenation mysql-5.5 collate

我想在表的两列中使用LIKE运算符进行搜索。列名是:person_first_name,person_last_name。我找到了一种方法,搜索两列,如一列。方法是列必须 CONCAT 并在连接的字符串中搜索,但我的值是中文。我想用中文连词搜索。在早些时候,我用这种方式搜索了中文" COLLATE UTF8_GENERAL_CI "但这不能用于连接字符串。我尝试了很多方法,但我没有得到真正的结果。

示例:

SELECT * FROM (`dm_account` a) WHERE CONCAT(a.person_first_name, ' ', a.person_last_name) COLLATE UTF8_GENERAL_CI LIKE '%ANY CHINESE CHARACTER%' ORDER BY `a`.`createdate` asc;

但是这个查询并没有给我任何记录。

SELECT CONCAT(a.person_first_name, ' ', a.person_last_name) FROM dm_account WHERE id=2184;

此查询未向我显示组合词。但是这个用户有名字和姓氏。

任何人都可以帮助我吗? 感谢。

2 个答案:

答案 0 :(得分:1)

如果列字符集 utf8 且排序规则为 utf8_general_ci ,则表格别名a未另外定义则不需要 COLLATE UTF8_GENERAL_CI

您可以查看此示例

CREATE TABLE `person` (
  `id` int(11) NOT NULL,
  `first_name` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `last_name` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

人员记录

INSERT INTO `person` VALUES ('1', '昌, 畅, 长 ', '富, 芙');

查询

SELECT  * FROM person WHERE CONCAT(first_name, ' ', last_name) LIKE "%昌, 畅, 长  富, 芙%"

结果

1   昌, 畅, 长     富, 芙

答案 1 :(得分:0)

SELECT CONCAT(person_first_name, ' ', person_last_name) 
FROM dm_account 
WHERE id=2184

您使用了表别名a但未定义