复制列的值变为NULL时,无法按列排序

时间:2012-12-03 07:29:43

标签: mysql sql

我在存储过程中有一个临时表,这给我带来了一些麻烦。出现的基本症状是它不允许我按特定栏目订购。

-- 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排序。

尝试了所有可能的排列并得出结论,有两列它总是拒绝排序(实际表中的实名是departmentuseridVARCHAR(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

0 个答案:

没有答案