1. 复现错误
今天,查看我禅道上的日志,发现有这个错误:
数据库查询处的字段,存在空格,那么,怎么解决这个问题呢?
2. 解决思路
-
首先打开控制台,查看所调用的接口。
-
通过接口找到对应的数据表。
由于数据表是公司所用,暂不能写入到博客中,我单独创建数据表来演示。
表的创建代码如下:
CREATE TABLE `class` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`no` int(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3;
按如下方式添加两条测试数据:
mysql> INSERT INTO `class`(`name`,`NO`) VALUES ('六 年 级', 20060);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO `class`(`name`,`NO`) VALUES ('七年级', 20061);
Query OK, 1 row affected (0.01 sec)
第一条数据的六 年 级
存在空格,通过如下SQL查询,来验证是否存在空格:
mysql> select * from class where name like '% %';
+----+----------+-------+
| id | name | no |
+----+----------+-------+
| 1 | 六 年 级 | 20060 |
+----+----------+-------+
1 row in set (0.00 sec)
3. 解决问题
因为六 年 级
是中间包含空格,可以使用replace
去除空格,如下代码所示:
mysql> update `class` set `name`=replace(`name`,' ','') where name like '% %';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Query OK, 0 rows affected (0.00 sec)
表示已成功执行。
使用如下SQL
查询,再次验证是否执行成功:
mysql> select * from class;
+----+--------+-------+
| id | name | no |
+----+--------+-------+
| 1 | 六年级 | 20060 |
| 2 | 七年级 | 20061 |
+----+--------+-------+
2 rows in set (0.00 sec)
4. 重要补充
上述是去除中间空格,如下为去除其他空格。
ltrim
去除左侧空格
update 表名 set 字段名=ltrim(字段名)
rtrim
是去除右侧空格
update 表名 set 字段名=rtrim(字段名)
trim
是去除两端空格
update 表名 set 字段名=trim(字段名)
- 如果
excel
导表,不小心产生了空格,如下方法解决
update
`表名`
set
字 段 名 = replace(
replace(replace(字 段 名, char(9), ''), char(10), ''),
char(13),
''
);
char(9)
:水平制表符 (tab
键 或者\t
)char(10)
:换行键 (\n
)char(13)
:回车键 (Enter
键)