Hatena::ブログ(Diary)

目論見検討委員会 このページをアンテナに追加 RSSフィード

旧タイトル:はぴねす・りなっくす
ラジオとかアニラジ関連のブログでしたが、
現在は夏冬コミケの印刷会社締切情報ブログになってます。
技術系のことはこっちに引っ越しました
ANA・飛行機・旅行関連はこっちでやってます

2011-04-29

数字を0で埋める

  • 探すのが面倒なのでメモ
  • MySQLに特定文字列で不足桁の文字を埋める関数がある
select lpad(id , 3 ,0);

2011-02-21

mysql 5.1 で文字化け@php

ただのメモ

[mysqld]
character-set-server=utf8
skip-character-set-client-handshake

[mysql]
default-character-set = utf8
mysql> SHOW VARIABLES LIKE 'char%';
+--------------------------+--------------------------------------------------------------+
| Variable_name            | Value                                                        |
+--------------------------+--------------------------------------------------------------+
| character_set_client     | utf8                                                         |
| character_set_connection | utf8                                                         |
| character_set_database   | utf8                                                         |
| character_set_filesystem | binary                                                       |
| character_set_results    | utf8                                                         |
| character_set_server     | utf8                                                         |
| character_set_system     | utf8                                                         |
| character_sets_dir       | /usr/local/mysql-5.1.55-linux-x86_64-glibc23/share/charsets/ |
+--------------------------+--------------------------------------------------------------+
8 rows in set (0.00 sec)

2009-09-21

mysqlのphpのpdoのプレースホルダに関するメモ

  • はまったので書き残しておく
  • テーブル名をプレースホルダにするとmysqlのsyntax errorが出る
    • 当たり前なのか?
  • 違ってたらツッコミ歓迎
$conn = new PDO(省略);
$sql = "INSERT INTO :tableName ( `id` , `name` ) VALUES ( :id , :values)";
$stmt = $conn->prepare($sql);
$arr = array('tableName' => 'SOME_TABLE' , 'id' => '1', 'values' => 'some string');
$stmt->execute($arr);
print_r($stmt->errorInfo());

ってやると、'SOME_TABLE'あたりでsyntax errorだとのたうち回る。

よく見ると、テーブル名をシングルクオートで囲っているのがエラーの原因らしく、

$tableName = "SOME_TABLE";
$sql = "INSERT INTO $tableName ( `id` , `date` ) VALUES ( :id , :values)";

などとしてやったらうまくいった。プレースホルダのそもそもの使い方を間違っているような気がした。

追記(9/23)

同じようなことなんだけど。mysqlの関数をプレースホルダに入れてやっても使えない。

こんな感じで配列作ってNOW()をクエリに渡そうとすると

$arr = array('tableName' => 'SOME_TABLE' , 'id' => '1', 'values' => 'NOW()');

関数が文字列になってしまい、クエリ自体が下記のようになる。

INSERT INTO SOME_TABLE ( `id` , `name` ) VALUES ( '1' , 'NOW()' )";

わざわざ全クエリをはき出して調べたんだから感謝しなさいうわなにをs(ry

SET GLOBAL general_log = 'ON';

※ただしmysql5.1.12以上に限る

2009-06-30

mysqld_multiで複数立ち上げた時に、mysqlコマンドで接続しようとして大いにはまった

ただのメモ。

/etc/my.cnfで、datadirとport、pid、socketをそれぞれ指定。こんな感じ。

[mysqld_multi]
mysqld     = /usr/local/bin/mysqld_safe
mysqladmin = /usr/local/bin/mysqladmin
user       = mysql

[mysqld1]
socket     = /tmp/mysql.1.sock
port       = 3306
pid-file   = /usr/local/mysql/var/hostname.pid2
datadir    = /usr/local/mysql/var
user       = mysql

[mysqld2]
socket     = /tmp/mysql.2.sock
port       = 3307
pid-file   = /usr/local/mysql/var2/hostname.pid3
datadir    = /usr/local/mysql/var2
user       = mysql

my.cnfの例は本家を参照:no title

/usr/local/mysql/bin/mysqld_multi start 1,2

とやって、port 3306と3307で起動しているところまで確認。

mysqlが立ち上がっている同じマシンで、下のコマンドラインで接続しようとしたら、なぜかport 3306のmysqlに接続される。

mysql -u user -p -P 3307

とか、

mysql -u user -p -h localhost -P 3307

解決

mysql -u user -p -h 127.0.0.1 -P 3077

ちょいとググってみたら、

127.0.0.1 と ポート番号 を指定するのがキモ。

http://www.avant-tokyo.com/solaris/mysql_parallel.html

と、書いてあったので解決した。THX。

mysqlへ接続するphpを書いていて、

$conn = mysql_connect("localhost", "user", "password");

だと/tmp/mysql.sockが無いよエラー。

以下は接続できた。

$conn = mysql_connect(":/tmp/mysql.2.sock", "user", "password");

もういっちょ接続できる例

$conn = mysql_connect("127.0.0.1:3307", "user", "password");

IP指定とソケット指定があるのか。mysqlのマニュアルでも見てみるか。

やっぱ問題が(追記:2009/07/01)

/usr/local/mysql/bin/mysqld_multi stop 1,2

これが聞かない。reportしてもrunnninngになっている。

しばらく待っても落ちる様子がないのでkillしてる。

原因は、追う時間がないのでまた今度。

2009-02-05

DATE型に入る値

知らなかったのでメモ。

  • MySQL 5.0.67(ソースからビルド)

DATE型を作って、そこに

入れた値実際に入った値
2009-02-002009-02-00
2009-02-290000-00-00
2008-02-292008-02-29
2009-00-142009-00-14
2009-07-312009-07-31
2009-00-002009-00-00

ん?どういう実装なんだ?