繁体   English   中英

在插入VARCHAR列时自动修剪CHAR数据

[英]Automatically trimming CHAR data on insert into VARCHAR column

最近,我们将MySQL数据库(〜v3.5)从本地托管服务器移至GoDaddy。

传输进行得很好,但是运行着一个旧的自动化过程,该过程将数据从旧的FoxPro数据库传输/同步到MySQL数据库。 发生的问题是CHAR列将空白添加到VARCHAR列。 这会在网页上带来有趣的结果。

虽然我计划这样做,以便在传输之前对源数据进行修整。 同时,我是否可以在my.ini(或其他位置)中启用一个选项,该选项将自动修剪末尾有空格的字符串数据?

您可能可以通过使用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|

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

11.4.1 CHAR和VARCHAR类型

存储VARCHAR值时不会对其进行填充。 尾随空格的处理取决于版本 从MySQL 5.0.3开始,遵循标准SQL,在存储和检索值时保留尾随空格。 在MySQL 5.0.3之前,尾随空格存储在VARCHAR列中时会从值中删除; 这意味着检索到的值中也不存在空格。

如果实际上是用Visual Foxpro编写的“运行旧的自动化过程,它将旧的FoxPro数据库中的数据传输/同步到MySQL数据库”,则更改是微不足道的,只需将RTRIM(field)添加到(I猜测)sqlexec命令字符串。

对于“暂时可以在目标端完成的操作”,请检查链接注释:

在mySQL 5.0.3之后,如果您在VARCHAR列中留有结尾空格,则可以通过两步过程将其删除:

1)将列类型更改为char

2)将列类型更改回varchar。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM