1

以下のように会社という名前のテーブルが1つあります。

CREATE TABLE IF NOT EXISTS `companies` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `name` varchar(40) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

このテーブルの MySQL talbe データは次のとおりです。

INSERT INTO `companies` (`id`, `user_id`, `name`) VALUES
(1, 2, 'Mylan'),
(2, 1, 'Intas'),
(3, 48, 'Glenmark'),
(4, 21, 'Amipharma'),
(5, 1, 'XEPA SOUL');

以下のクエリを使用してレコードをソートすると

SELECT * FROM companies ORDER BY name ASC;

これは私が返します。

  • ゼパソウル
  • アミファーマ
  • グレンマーク
  • インタス
  • マイラン

Xこれは最初に来て、最後に表示する必要があるため、間違っています。

なぜこのようになっているのかわかりません。

これを修正できるように、ヒントまたは説明を教えてください。

ありがとう

4

4 に答える 4

3

LTRIM() を使用して、左のスペースを削除できます。

  SELECT * FROM companies ORDER BY LTRIM(name) ASC;
于 2013-04-08T11:53:56.137 に答える
1

他の方がコメントされている通り、XEPA SOULの前に余分な空白があると思います。必要に応じて、節でデータをTRIMできます。ORDER BY

SELECT * FROM companies ORDER BY TRIM(name) ASC;
于 2013-04-08T11:14:17.890 に答える
1

デフォルトの文字セットと照合順序は latin1 と latin1_swedish_ci であるため、非バイナリ文字列はデフォルトで大文字と小文字が区別されません。これは照合設定の問題です。これで試してください

SELECT * FROM companies ORDER BY CONVERT (name USING latin2) ASC

于 2013-04-08T11:20:48.837 に答える