0

可能重复:
Mysql中的字母数字顺序

我的表格对我的记录进行了错误的排序。主键是一个字符串,它是一个字符,它与一个从 1 开始的数字组合,例如:F1。当它得到两位数时就会出现问题,例如:F10。数据库只检查前两个字符并丢弃其余字符。前任:

它应该看起来像这样 F1,F2,F3,...F9,F10,F11 等。

看起来像这样 F1、F10、F11、F12、....、F2、F3、F4 等。

因此,如果您有任何想法,请分享。

注意:使用 MySql 5 服务器和 MySql Workbench 5.2

下面是数据库中一张表的脚本代码:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;

SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';



DROP SCHEMA IF EXISTS `RimpexDB` ;

CREATE SCHEMA IF NOT EXISTS `RimpexDB` DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci ;

USE `RimpexDB` ;



-- -----------------------------------------------------

-- Table `RimpexDB`.`RpxFornecedor`

-- -----------------------------------------------------

DROP TABLE IF EXISTS `RimpexDB`.`RpxFornecedor` ;



CREATE  TABLE IF NOT EXISTS `RimpexDB`.`RpxFornecedor` (

  `FID` VARCHAR(80) NOT NULL ,

  `FNome` VARCHAR(80) NOT NULL ,

  `FDescricao` VARCHAR(1000) NULL ,

  `FNTel` VARCHAR(45) NULL ,

  `FNCel` VARCHAR(45) NULL ,

  `FEndereco` VARCHAR(200) NOT NULL ,

  `FEmail` VARCHAR(100) NULL ,

  `FFax` VARCHAR(45) NULL ,

  `FActivo` CHAR NOT NULL ,

  `FDataAct` VARCHAR(200) NOT NULL ,

  `FDataNAct` VARCHAR(200) NULL ,

  PRIMARY KEY (`FID`) ,

  INDEX `FID` (`FID` ASC, `FNome` ASC, `FDescricao` ASC, `FNTel` ASC, `FNCel` ASC, `FEndereco` ASC, `FEmail` ASC, `FFax` ASC, `FActivo` ASC, `FDataAct` ASC, `FDataNAct` ASC) )

ENGINE = InnoDB

COMMENT = 'Fornecedor Table' ;



SET SQL_MODE=@OLD_SQL_MODE;

SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;

SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
4

3 回答 3

2

假设第一个字符始终是一个字母(并且只有第一个字符是),这就是您需要对当前数据结构执行的操作:

select FID
from RpxFornecedor
order by cast(substring(FID, 2) as integer)

但是你真的应该考虑将你的 PK 更改为数字。

于 2011-09-22T13:41:29.213 回答
2

MySQL 不只是查看前两个字符并丢弃其余字符,而是按词汇顺序(即字母顺序)排序。您需要的排序类型有时称为自然排序。

如果您可以选择将 PK 从字符串更改为仅删除每条记录的“F”字符的数字列,那么您的情况会好得多。

于 2011-09-22T13:39:45.060 回答
0

一种解决方法是使用 F00001、F00002、... F12345 字符串作为主键。

于 2011-09-22T13:39:59.983 回答