0

重複の可能性:
Mysql の英数字順

テーブルがレコードを正しく並べ替えていません。主キーは、1 文字の文字列で、1 から始まる数字と組み合わせたものです。例: F1. 2桁の数字になると問題になりますex:F10。データベースは最初の 2 文字のみをチェックし、残りは破棄します。元:

F1、F2、F3、...F9、F10、F11 などのようになります。

F1、F10、F11、F12、....、F2、F3、F4などのように見えます。

ですから、何かアイデアがあれば共有してください。

注: MySql 5 サーバーと MySql Workbench 5.2 を使用

データベース内の 1 つのテーブルのスクリプト コードを次に示します。

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

MySQL は、最初の 2 文字を見て残りを破棄するだけでなく、語彙順 (つまり、アルファベット順) でソートします。必要な順序付けのタイプは、自然順序付けと呼ばれることがあります。

PK を文字列から各レコードの「F」文字を削除する数値列に変更するオプションがある場合は、はるかに優れています。

于 2011-09-22T13:39:45.060 に答える
2

最初の文字が常に文字である (最初の文字のみ) と仮定すると、現在のデータ構造で行う必要があるのは次のとおりです。

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

ただし、PK を数値に変更することを検討する必要があります。

于 2011-09-22T13:41:29.213 に答える
0

1 つの回避策は、F00001、F00002、... F12345 文字列を主キーとして使用することです。

于 2011-09-22T13:39:59.983 に答える