碰到的问题:
使用 locate 函数查询 op_phone 表时,没有返回结果,语句如下:
select operator from op_phone where locate(operator,'中国联通');
打开 op_phone 表,可以看到该表中有很多记录的 operator 是“联通”,百思不得其解。
后来用 select 查询第一条联通的记录,然后复制 operator 字段值到 UE 中查看,发现 "联通"两字的后面还有回车换行符:C1 AA CD A8 0D 0A
之所以出现这种情况,是因为 op_phone 表中的记录是从一个文本文件中导入的。
用以下语句检查该字段的长度:
select length(operator) from op_phone limit 0,1;
得到的结果是 5,可见没有把 0A 当作字符串内容的一部分,而是像空格在结尾时一样被当作空白而忽略。
网上有人说:"MYSQL把所有连续的“空白”符当作一个单个的空格。"
--经试验,这句话是错误的:我在"中国移动"中间插入4个空格,select 得到的 length 是 12;
这句话应该改成:"MYSQL把出现在结尾的所有连续的“空白”符当作-0,即并不认为是字符串内容的一部分。"
将回车换行合起来作为一个字符串,在字符串字段中查找,返回是0,找不到:
select locate(char(13,10),operator) from op_phone limit 0,1;
只查找回车,可以找到:
select locate(char(13),operator) from op_phone limit 0,1;
// 返回是3,operator 的值为"联通\r\n"
去掉结尾的回车换行符的语句:
update op_phone set operator=left(operator,locate(char(13),operator)-1);