« HTML要素のイベントハンドラを自動登録 | トップページ | 家庭内グルメが二度おいしい »

2012.02.21

MySQLのDISTINCTとCONCATで日本語文字列が変になる。

mysql(5.1)で、以下のSQLで末尾の「年」が表示されなくて困ってた。

何が悪いんだかわけわからん。

SELECT DISTINCT
  CONCAT(
    YEAR(date_begin),
    '年') as y
FROM table

いろいろ複雑な事情があるのでしょう。DISTINCTしなかったり、YEARを使わなかったり、'年'を'NEN'に変えてみるとおかしくならない。ちなみにYEARじゃなくってMONTHでもダメ。場合によっては「SYNTAX ERROR」が出たり。

しばらく困っていたけど、解決法は単純。なんてことはない、明示的にCASTするだけ(↓)

SELECT DISTINCT
  CONCAT(
    CAST(YEAR(date_begin) AS CHAR),
    '年') as y
FROM table

暗黙のキャストが行われるとうまく行かないってことかもしれんが、DISTINCTとの関係は不明なまま・・・。なにより、このバグっぽい挙動に困ってた人が、自分だけっぽくて孤独・・・

« HTML要素のイベントハンドラを自動登録 | トップページ | 家庭内グルメが二度おいしい »

プログラミング」カテゴリの記事

database / SQL / O-R mapping」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: MySQLのDISTINCTとCONCATで日本語文字列が変になる。:

« HTML要素のイベントハンドラを自動登録 | トップページ | 家庭内グルメが二度おいしい »

2019年5月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
フォト

Google AdSense

銀の弾丸

無料ブログはココログ

他のアカウント