我的表格不正确地排序我的记录。主键是一个字符串,作为一个字符串,它与从1 ex: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;
答案 0 :(得分:2)
MySQL不只是查看前两个字符并丢弃其余字符,而是按词法排序(即字母顺序)排序。您需要的排序类型有时也称为自然排序。
如果您可以选择将字符串中的PK更改为只删除每条记录的“F”字符的数字列,那么您的状况会更好。
答案 1 :(得分:2)
假设第一个字符始终是一个字母(并且只有第一个字符),那么您需要对当前数据结构执行此操作:
select FID
from RpxFornecedor
order by cast(substring(FID, 2) as integer)
但你应该考虑将PK改为数字PK。
答案 2 :(得分:0)
一种解决方法可能是使用F00001,F00002,... F12345字符串作为主键。