2009年08月21日

[MySQL] 数値型の桁数指定

MySQL で create table する時、

CREATE TABLE `mytable` (
`id` INT( 4 ) NOT NULL
)
とかって書く時の INT( 4 )が何を意味するかって話です。

今まで私は、最大桁数を表すと思ってました。でもMySQLのリファレンスを見てみると、

MySQL には、INT(4) のように、型の基本キーワードに続いて整数値の表示幅をかっこ内に指定できるオプションがあります。このオプションの表示幅の指定は、カラムに指定された幅より小さい幅を持つ値で表示の左側を埋める目的で使用されますが、そのカラムに格納できる値の範囲が制限されたり、そのカラムに指定された幅を超える幅を持つ値の桁数が制限されたりすることはありません。オプションの拡張属性 ZEROFILL と組み合せて使用した場合、デフォルトのスペースに代わってゼロが埋め込まれます。 たとえば、INT(5) ZEROFILL として宣言されたカラムの場合、値 4 は 00004 として取り出されます。
引用元: http://dev.mysql.com/doc/refman/4.1/ja/numeric-types.html
なぬ!あくまでも表示する時の桁数であり、別に最大桁数を制限するものではないのね!!

おしまい◎

posted by dev-man at 18:15| Comment(0) | TrackBack(0) | MySQL | このブログの読者になる | 更新情報をチェックする

2009年07月19日

[MySQL] select 文で、曜日によって抽出するレコードを変更したいとき

下記のSQLでは、id を 7 で割った余りと今日の曜日によって、抽出するレコードを決定します。

  • 月曜日・・・余りが 0 のものを抽出
  • 火曜日・・・余りが 1 のものを抽出
  • (略)
  • 日曜日・・・余りが 6 のものを抽出

SELECT *
FROM mytable
WHERE id mod 7 = WEEKDAY( current_date )
posted by dev-man at 12:03| Comment(0) | TrackBack(0) | MySQL | このブログの読者になる | 更新情報をチェックする

2009年06月02日

[MySQL] 利用可能な最少の(空きの)IDを取得する

MySQLで一意のIDを使用するにはauto_incrementを使えば通常問題ないのですが、レコードを削除した場合、IDが一つ空いた状態になります。 通常はそれで問題ありませんが。

場合によっては、空いたIDを優先的に使用したい場合もあります。調べてみたところ、MySQLはそのような機構を提供していないので、以下のSQLで求めることにしました。

# 最も小さい利用可能なIDを探す

select min(t_getnewid.inc_id) newid from 
(
	select t_orig.myid, t_inc.inc_id from

	# オリジナルの表
	(
		select (IDフィールドの名前) myid from (テーブル名)
	) t_orig

	# インクリメントした表を外部結合
	right join
	(
		select 1 inc_id union # IDの最小値が1の場合
		select (IDフィールドの名前) + 1 inc_id from (テーブル名)
	) t_inc
	on t_orig.myid = t_inc.inc_id

) t_getnewid
where t_getnewid.myid is null
posted by dev-man at 09:49| Comment(0) | TrackBack(0) | MySQL | このブログの読者になる | 更新情報をチェックする

2007年09月20日

[MySQL] 文字コードはデータベースごとに設定できるのね。

XAMPPでローカルテスト環境構築してるとき、苦戦したのが文字コード。

  • XAMPPインストール時MySQLの文字コードはデフォルトでUTF-8
  • EUC-JPにしたい!

というわけでMySQLの設定を変えたりしてみてもなかなかうまくいかない。

でも実はMySQL5.0くらいから(?)データベースごとに文字コードが設定できるらしい!

CREATE DATABASE mydb DEFAULT CHARACTER SET ujis ;

※ujisはEUC-JPのコト

すると問題なくEUC-JPのデータベースが構築だきた!かんたん!

すでに作成済みにデータベースの文字コード変更は

alter database mydb DEFAULT CHARACTER SET ujis ;

posted by dev-man at 23:55| Comment(0) | TrackBack(1) | MySQL | このブログの読者になる | 更新情報をチェックする