MySQLはとても気ぃつかい屋さんである。我々が投げる多少あいまいな指示も頑張って解釈し、なんとか文句を言わずに実行してみようと挑戦してみてくれる。 今日はそんなMySQLがケナゲに解釈してくれる自動変換について紹介しようと思う。この自動変換、ケナゲなMySQLの奥ゆかしさ故、出した指示と異なる動作をされたことに気がつかないことがある。ここで紹介する6つの自動変換をしっかり脳ミソにたたき込んでおけば、無用なトラブルにハマる時間も減るかもしれない。 1.[数値] 範囲外の数値は頭を押さえつけられる intやsmallint、bigintなどの数値型には、扱える範囲が決まっている。例えばint型なら最大21億ちょっとだ(unsignedの場合は43億弱)。これより大きい数字を登録するよう指示を出すとMySQLはどうするか。そう、頑張って入れられるところまで入れてくれるのである。「入れられるとこ
CakePHPでDBからレコードを取得したり逆に入力したりする際にはfindやsaveというお手軽なメソッドがあるのでとても便利。 だけど、結構複雑なクエリーを投げなきゃいけないとなると、どう書けば良いのか分からなくなる場合も意外とあったりする。findの条件指定のときとか。BETWEENとかLIKEなんかも、一度知ってしまえばたいしたことはないのだけど、知らないとわりと悩む。少なくとも自分は悩みました。 どうしても困ったら$this->query()で直接SQL文を書いちゃえば良いのだろうけど、WHERE句でBETWEENを使う場合の記述でちょっと面白い書き方を発見したので、ここではそれで頑張ってみる。 じゃあたとえば、idが10から20の間のレコードを取得するとしましょう。 $params = array('conditions' => array('id BETWEEN ? AND
mySQLのサービス起動時に「エラー1067」が出てはまりました。 以下、解消方法(C直下にMySQLをインストールしていた場合) 1.c:\mysql\bin\mysqld.exe --remove でサービスを削除 2.MySQL削除 3.再起動 4.MySQLを再インストール 5.my.iniの場所を指定して、サービスを再登録 c:\mysql\bin\mysqld.exe --install-manual MySQL --defaults-file=c:\mysql\my.ini 6.コンパネ>管理ツール>サービスからMySQLを起動 何回か繰り返しているうちにできました。 エラー1067はmy.iniをうまく読み込めないために出るエラーらしい。 なぞです。うーん。
mysqld を Windows のサービスとして登録しようとしたところ、エラー 1067 が発生した。 mysql-noinstall-5.0.24a-win32.zip を解凍後、サービスに登録 http://dev.mysql.com/downloads/ # mysqld-max-nt --install その後、サービス起動するとエラー 1067 が発生する。 # net start mysql MySQL サービスを開始します. MySQL サービスを開始できませんでした。 システム エラーが発生しました。 システム エラー 1067 が発生しました。 プロセスを途中で強制終了しました。 設定ファイルがうまく読み込めていない模様 http://dev.mysql.com/doc/refman/5.0/en/windows-troubleshooting.html いったんサービ
MAMPでmysqlの文字コードをutf8に変えようとしたものの、my.cnfが全然読み込まれなくてはまったのでメモ。検索すると出てくる設定方法下記のような記述が結構見つかる。/Applications//MAMP/Library/share/mysql/にmy-large.cnfとかmy-small.cnfがあるので、/Applications/MAMP/db/mysql/my.cnfにコピーして編集。でも自分の環境ではうまくいかなかった。MAMPのバージョンとかによって違うのかな?my-*.cnfがない・・・findで探す $ find /Applications/MAMP/ -name my*.cnf /Applications/MAMP//conf/my.cnf /Applications/MAMP//Library/support-files/my-huge.cnf /Appli
いやまあ、マニュアルに書いてあるけど。 http://dev.mysql.com/doc/refman/5.6/en/option-files.html Linuxで公式MySQL、--defaults-file, --defaults-extra-fileを指定しない場合は、 /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf SYSCONFDIR/my.cnfのこと。 公式のバイナリーはSYSCONFDIR== /usr/local/mysql/etc。cmakeのオプションで変えられる。 MariaDBはこいつが設定されていないっぽい。 /usr/local/mysql/my.cnf $MYSQL_HOME/my.cnfのこと。 basedirを設定してれば$MYSQL_HOME== basedirになる。 /home/
PHP+MySQLを利用していて、DATETIME型のカラムに対して、直接、加算・減算をしたSQLの条件を指定したい場合の方法について覚書しておきます。 もちろん、PHPで日時計算をして、変数に代入してからSQLに組み込むなどしても日時の加算・減算の条件付けはできるのですが、SQLの発行時点で加算・減算した方が楽に操作できます。 MySQLの公式マニュアルにも記述があるのですが、MySQLのマニュアルは読みづらいと思うので要点をまとめてみました。 (参考)公式マニュアル http://dev.mysql.com/doc/refman/5.1/ja/date-and-time-functions.html 該当するのはDATE_ADD DATE_SUBの箇所です。 分かりづらいので、具体的なSQLを組んでみます。 "SELECT count(id) as cnt FROM table WHE
忘れるのでメモ MySQL 5.1で確認した。 外部キー制約の確認 SHOW CREATE TABLE テーブル名; show create table bbs_thread; 外部キー制約の追加 ALTER TABLE テーブル名 ADD FOREIGN KEY (制約を張りたいカラム) REFERENCES 張りたいテーブル(張りたいカラム); alter table bbs_thread add foreign key (creator_id) references accounts_user(id); 外部キー制約の削除 ALTER TABLE テーブル名 DROP FOREIGN KEY 制約名; ALTER TABLE bbs_thread drop foreign key creator_id_refs_id_75448b6c;
データベースに指定した名前でテーブルが既に存在するかどうかを 確認することができます。 LIKE検索なので、テーブル名にはワイルドカード(%)を使用することができます。 ここでは例としてPHPを使って確認します。 実行しているのは単純なSQL文ですので、他の言語でも同様にできると思います。 $con = mysql_connect("localhost", "mysql_user", "mysql_password"); mysql_select_db("database", $con); $sql = "SHOW TABLES FROM [DATABASE_NAME] LIKE '[TABLE_NAME]'"; $rst = mysql_query($sql, $con); DBは既に接続されているので以下でも可 $sql = "SHOW TABLES LIKE '[TABLE_NAME
MySQLでERROR 1005 (HY000): Can't create table 'user_db.groups' (errno: 150) MySQLにおいて、外部参照キーをもつテーブルを作成する際に、以下のエラーが発生した際の対処方法を記載する。 ERROR 1005 (HY000): Can't create table 'user_db.groups' (errno: 150) 上記のエラーの原因は、以下の2つ考えれる。 MySQLでは、存在しないテーブルに対する外部参照キーの設定を許可していない。 ⇒設定により、一時的に、上記のチェック機能を無効にする。 親テーブルと子テーブルの外部参照キーとするカラムのデータタイプまたはサイズが異なる。
phpMyAdminで作ったテーブルにデータを入れようとしたところ日本語の文字化けが起こったのでメモ ※入力内容はサンプルです 文字化けの原因はテーブルの照合順序 文字化けが起きたテーブルの「操作」タブをクリック 照合順序という項目があるのでutf8_general_ciに変更して実行 既に入れてしまった日本語は戻らない そうなので、データを削除。やりなおし 改めて登録 ※入力内容はサンプルです 日本語が表示された。 それでもうまくいかんとき 日本語表示するまでにけっこう手間かけたのでさらにメモ。 一度phpMyAdminの文字コードを確認してみるのもおすすめです。 「SQL」タブをクリックしてデータベース サーバ"localhost" 上でクエリを実行するに入力 SHOW VARIABLES LIKE 'char%' phpMyAdminの文字コードを確認できる 文字コードをutf8にす
こんにちは、mysqlでJOINした後、値を取得したいのですが、 2つのテーブルに値があり、片方を指定して取得する方法がわかりません。 いろいろ調べてみたのですがわかりませんでした。 どなたかご存知の方がいたら教えてください。 c_diary テーブルと c_member テーブルには、両方にr_datetimeという列があります。 それを別々の変数に代入したいのですが、うまくいきません。 SELECT * FROM c_diary left join c_member on c_diary.c_member_id = c_member.c_member_id $rs = mysql_query($sql); while ($item = mysql_fetch_array($rs)) { $c_diary_r_datetime = $item['c_diary.r_datetime'];
cakePHPはMySQLと相性がいいが、トランザクションにちょっと癖がある。 通常、 $this->Model->begin(); でトランザクションが開始されるのだが、cakePHPでは単純に BEGIN というSQLを流しやがる。PostgreSQLならいいが、MySQLじゃだめじゃん…。 というわけで以下のソースをAppModelに追加すると正常にトランザクションができる。 function begin() { $db =& ConnectionManager::getDataSource($this->useDbConfig); $db->begin($this); } function commit() { $db =& ConnectionManager::getDataSource($this->useDbConfig); $db->commit($this); } fun
MySQL Manual | 6.2.1 数値型 MySQL には、INT(4) のように、型の基本キーワードに続いて整数値の表示幅をかっこ内に指定できるオプションがあります。このオプションの表示幅の指定は、カラムに指定された幅より小さい幅を持つ値で表示の左側を埋める目的で使用されますが、そのカラムに格納できる値の範囲が制限されたり、そのカラムに指定された幅を超える幅を持つ値の桁数が制限されたりすることはありません。オプションの拡張属性 ZEROFILL と組み合せて使用した場合、デフォルトのスペースに代わってゼロが埋め込まれます。けっこう勘違いしている人がいそうなのですが、mysqlの型でint(?)とか、?に数字を入れますが、この数字は上記の通りZEROFILLをした際にスペースに代わってゼロが埋め込まれる際の幅なのです。自分は勘違いというかあまりよくわかっていませんでした…。 つまり
rakeコマンドでマイグレーションを行うという箇所で、以下のようなエラーが出ました。 rake aborted! #42000Access denied for user ''@'localhost' to database 'recipe3_development' (See full trace by running task with --trace) 調べてみると、教えてgooの中で「権限」の話が出ていました。 ※しかし、プログラミング関連で、はてなの人力検索よりも 教えてgooのほうがいろいろと見つかるのは意外だった。。。 この他にもいろいろと見つかります。教えてgoo便利ですね。 そこにあったリンクをたどると、テーブル対しての権限を与える箇所についての詳細が こちらにありました。 今回のチュートリアルの中で、テーブル作成と権限の与える箇所がありました。 mysql> creat
はローカルテスト用サーバー構築にはとっても手っ取り早いインストールパッケージですが、これ…普通にインストールして利用しようとすると、まず、SQL文、データのインポート等でデータを流し込む際に、日本語が文字化け"?????"ハテナ(クエスチョンマーク)になってしまう。 以前はEUCってセットが標準的だったのだが、Unicodeも整備されてきたので、最近は専らUTFにて構築することが多くなった。 この文字化けって… 実際、不具合とかそういうものではないのだが、結構悩まされてる方も多いように思う。 で、問題の文字化け解消方法につき、色々と書かれたサイトが見受けられるのだが… とりあえず、今まではこれらのサーバーセットをインストールした後、下記のサイトにある方法でこれらの文字化けを回避していた。 http://cl.pocari.org/2006-06-17-1.html 要するに、-> の場所に
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く