gpt4 book ai didi

mysql - 带有额外空格的 MariaDB VARCHAR 外键引用

转载 作者:行者123 更新时间:2023-11-29 05:20:08 25 4
gpt4 key购买 nike

我在一个表中有一个字段引用了另一个表中的一个字段。外键约束正常工作,但如果我在引用表中的字段末尾添加 (UPDATE) 一个额外的空格字符,则不会强制执行约束,并且即使值不同也允许更新。

这是否与 varchars 的工作方式有关,或者这是一个主要错误?当我们发现它时,对我们来说是一个惊喜。有什么想法吗?

已在 MariaDB 版本 10.0.14 和 5.5.35 上确认。

谢谢!

最佳答案

据我所知,使用 = 的规则验证外键约束。这意味着它遵循两列的排序规则(它们应该具有相同的排序规则)。这也意味着忽略字符串末尾的空格。

根据 documentation :

Per the SQL standard, LIKE performs matching on a per-character basis, thus it can produce results different from the = comparison operator:

mysql> SELECT 'ä' LIKE 'ae' COLLATE latin1_german2_ci;

+-----------------------------------------+
| 'ä' LIKE 'ae' COLLATE latin1_german2_ci |
+-----------------------------------------+
| 0 |
+-----------------------------------------+

mysql> SELECT 'ä' = 'ae' COLLATE latin1_german2_ci;

+--------------------------------------+
| 'ä' = 'ae' COLLATE latin1_german2_ci |
+--------------------------------------+
| 1 |
+--------------------------------------+

In particular, trailing spaces are significant, which is not true for CHAR or VARCHAR comparisons performed with the = operator . . .

因为连接条件很可能使用=,所以这种比较对于外键比较是有意义的。

关于mysql - 带有额外空格的 MariaDB VARCHAR 外键引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27026648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com