自动修剪插入到VARCHAR列中的CHAR数据

时间:2014-04-18 18:15:26

标签: mysql

我们最近将MySQL数据库(~v3.5)从本地托管的服务器迁移到GoDaddy。

转移很顺利,但是有一个旧的自动化流程可以将数据从旧的FoxPro数据库传输/同步到MySQL数据库。发生的问题是CHAR列正在向VARCHAR列添加空格。这会在网页上给出有趣的结果。

虽然我打算这样做,但是在转移之前,源数据会被削减。与此同时,我可以在my.ini(或其他地方)启用一个选项,它会自动修剪最后有空格的字符串数据吗?

2 个答案:

答案 0 :(得分:0)

您可以通过使用MySQL触发器来实现此功能。这是一些文档: https://dev.mysql.com/doc/refman/5.5/en/create-trigger.html

一个例子:

DROP TABLE IF EXISTS tmp;
CREATE TABLE tmp (`txt` varchar(50));
DROP TRIGGER IF EXISTS insert_tmp;
CREATE TRIGGER insert_tmp BEFORE INSERT ON tmp FOR EACH ROW SET NEW.txt=TRIM(NEW.txt);
INSERT INTO tmp VALUES ("        abc   "), ("efg      ");
SELECT txt, LENGTH(txt) FROM tmp;

输出:

|abc|3|
|efg|3|

答案 1 :(得分:0)

不是答案,但至少你会知道为什么会这样:

<强> 11.4.1 The CHAR and VARCHAR Types

  

VARCHAR值在存储时不会填充。 处理   尾随空格是依赖于版本的。截至MySQL 5.0.3,尾随   在存储和检索值时保留空格   符合标准SQL。在MySQL 5.0.3之前,尾随空格是   在将值存储到VARCHAR列时从值中删除;这个   表示检索到的值中也没有空格。

如果“运行将旧数据库中的数据从旧FoxPro数据库传输/同步到MySQL数据库的旧自动进程”实际上是用Visual Foxpro编写的,那么更改是微不足道的,只需在每个varchar字段中添加一个RTRIM(字段)即可。 (我猜)sqlexec命令字符串。

对于“暂时可以在目标方面完成的事情”,请查看链接评论:

  

发布mySQL 5.0.3,如果你遇到了跟踪空格   VARCHAR列,您可以通过两个步骤删除它:

     

1)将列类型更改为char

     

2)将列类型改回varchar。