我在存储过程中有一个临时表,这给我带来了一些麻烦。出现的基本症状是它不允许我按特定栏目订购。
-- Mockup table
CREATE TEMPORARY TABLE `result` (
col_a INT,
col_b VARCHAR(100),
col_c VARCHAR(100),
col_d VARCHAR(100));
-- Imagine inserting and updating a bunch of data here...
-- And then we select
SELECT
*
FROM
result
ORDER BY
col_b ASC,
col_c ASC,
col_d ASC;
上述内容会让MySQL愉快地脱口而出col_c
然后col_d
排序的结果集。完全不按col_b
排序。
尝试了所有可能的排列并得出结论,有两列它总是拒绝排序(实际表中的实名是department
和userid
,VARCHAR(100)
和{{ 1}}分别)。
所以,尝试在临时表上使用排序规则和数据库引擎,但这没有任何效果。无法在任一列中找到任何奇数数据。
现在今天早上我尝试制作INT
表的精确副本,我将其命名为result
并执行相当于(但是使用实际列名称,实际表有15列,这有点这个例子很多):
resultCopy
我得到的结果在两个不可移动的列中只有NULL值。除此之外,排序顺序完全相同。
因此,我的原始INSERT INTO `resultCopy` (col_a, col_b, col_c, col_d)
SELECT col_a, col_b, col_c, col_d
FROM result;
SELECT
*
FROM
resultCopy
ORDER BY
col_b ASC,
col_c ASC,
col_d ASC;
表中包含数据(包括在不可分类的列中),当从表中选择时,这些数据显然被返回(在终端MySQL客户端和MySQL Workbench中以及我的应用程序,它只是排序错误)但如果我尝试将这些数据插入到相同的临时表中,它就会丢失。
哦,为了增加乐趣,如果我不在程序结束时删除临时表(result
)并在我运行该程序后再次运行我的选择查询,它就可以正常排序。 / p>
那么,有没有人知道这里发生了什么?
MySQL版本:5.1.41-3ubuntu12.10