我们最近将MySQL数据库(~v3.5)从本地托管的服务器迁移到GoDaddy。
转移很顺利,但是有一个旧的自动化流程可以将数据从旧的FoxPro数据库传输/同步到MySQL数据库。发生的问题是CHAR列正在向VARCHAR列添加空格。这会在网页上给出有趣的结果。
虽然我打算这样做,但是在转移之前,源数据会被削减。与此同时,我可以在my.ini(或其他地方)启用一个选项,它会自动修剪最后有空格的字符串数据吗?
答案 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。