UNIX 環境変数 LC_*** 系に設定する値は RFC3066 というか RFC4646 にほぼ基づいているようですが、微妙に差異があるようです。
- 区切りコード: RFC4646 では %x2D (ハイフン-マイナス) に対し、環境変数では %x5F アンダースコア
- RFC4646 には case insensitive とあるが、環境変数では使い分けがされているようだ

そして実際、下記のようなコマンドを入力してもエラーは出ず結果は同じでした。
(cygwin と hpux-11.11 でチェック)

$ LC_ALL=ja_JP.utf8 sort hoge.txt > piyo1.txt
$ LC_ALL=ja-JP.utf8 sort hoge.txt > piyo2.txt
$ LC_ALL=JA-JP.UTF8 sort hoge.txt > piyo3.txt
$ LC_ALL=ja-jp.utf8 sort hoge.txt > piyo4.txt

Q1. この微妙な差の由来をご存知だったら教えてください。
Q2. 環境変数に使う最適記法を教えてください。
Q3. URI に使う場合の最適記法を教えてください。