「MySQL関係」(2012/03/20 (火) 17:27:54) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*sjisでの文字化けを回避するための方法
**MySQLの設定
-下記のような状態になるように設定する。
-MySQLとconnectした後にset names sjis;を発行する。
mysql> SHOW VARIABLES LIKE 'character\_set\_%';
+--------------------------+--------+
| Variable_name | Value |
+--------------------------+--------+
| character_set_client | cp932 |
| character_set_connection | cp932 |
| character_set_database | cp932 |
| character_set_filesystem | binary |
| character_set_results | cp932 |
| character_set_server | cp932 |
| character_set_system | utf8 |
+--------------------------+--------
7 rows in set (0.00 sec)
● システム変数の用途
character_set_system
"indentifiers" (テーブル名とかカラム名?) を格納するのに使われる。
utf8で 固定。
character_set_server
character_set_database のデフォルト値に影響する。
character_set_database
CREATE DATABASE で文字コードが指定されなかった場合、database の文字コー
ドはこれになる。
character_set_connection の値に影響する
character_set_client
クライアントから渡された SQL 文はこの文字コードであると解釈される。
character_set_connection
キャラクタセットイントロデューサ (例えば『_ujis'ほげ'』)が省略された
SQL 文中の文字列リテラルはこの文字コードであると解釈される。
character_set_results
サーバーがクライアントに返す結果をこの文字コードに変換する。
この変数を NULL にセットすると、結果に対する文字コード変換をしないよ
うにできる。
**Linux での mysql.cnfの設定
win用と同じ設定にしてもうまくいかなっかった。グローバル値は上記のようになったが、セッション値はujisになった。よって自動変換をしないようにskipしたら直った。
**null の演算
-Accessの場合はNz()関数
-MySQLではcoalesce() 関数は、最初の null でないデータを返す。 coalesce($変数,0)
select coalesce(null, 'abc', 'def');
+------------------------------+
| coalesce(null, 'abc', 'def') |
+------------------------------+
| abc |
+------------------------------+
**別名での定義(レスポンスに差があるのか)
-別名を使用したとき
select seisank_ns.katasikic from seisank_ns inner join (select seisank_nsh.katasikic from seisank_nsh) as H on seisank_ns.katasikic = H.katasikic
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|h
|1|PRIMARY||ALL|||||507||
|1|PRIMARY|seisank_ns|index||alt2|58||4340|Using where; Using index |
|2|DERIVED|seisank_nsh|index||atl1|58||507|Using index |
-使用しなかったとき
select seisank_ns.katasikic from seisank_ns inner join seisank_nsh on seisank_ns.katasikic = seisank_nsh.katasikic
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|h
|1|SIMPLE|seisank_nsh|index||atl1|58||507|Using index |
|1|SIMPLE|seisank_ns|index||alt2|58||4340|Using where; Using index |
やっぱり、副問い合わせの分が余分にかかっている。
**2つのカラムでLike句を使う
2つのテーブル顧客住所と住所があります。
|顧客ID|住所1|住所2|h
|1|北海道|札幌市手稲区○○|
|2|北海道|旭川市△■|
|住所ID|市区町村名|文字数|h
|1|札幌市手稲区|6|
|2|旭川市|3|
住所テーブルを使って、顧客テーブルの住所1の北海道(都道府県)を市区町村に置き換えます。
Accessでは
UPDATE 顧客, 住所 SET 顧客.住所1 = 住所!市区町村名,
顧客.住所2 = Right([住所2],Len([住所2])-住所!文字数)
WHERE (((顧客.住所2) Like [住所]![市区町村名] & "*"));
MySQLでは
UPDATE 顧客, 住所 SET 顧客.住所1 = 住所!市区町村名,
顧客.住所2 = Right(住所2,CHAR_LENGTH(住所2-住所.文字数)
WHERE (((顧客.住所2) Like concat(住所.市区町村名,'%') ));
ポイントは文字列の連結にconcatを使うことと、文字列の長さを求めるのにCHAR_LENGTHを使うこと~
SQLServerではうまく行きませんでした。直積の書き方が違うみたい。「UPDATE 顧客, 住所」のところでエラーが出る。
結果は
|顧客ID|住所1|住所2|h
|1|札幌市手稲区|○○|
|2|旭川市|△■|
nonプログラミングでこんな処理ができます。SQLは便利だ。
** ODBCドライバー:[MySQL][ODBC 3.51 Driver]Lost connection to MySQL server at 'reading initial communication packet', system error: 0
新しいPCにODBCドライバーをインストールしましたが、上記エラーで繋がりません?何でだろう?~
このページを読むと http://stackoverflow.com/questions/961928/could-not-connect-lost-connection-to-mysql-server-at-reading-initial-communica やはりセキュリティの関係のようでした。MySQLが動いているLinuxサーバーのhosts関係に新しくつなぐPCを登録して事なきを得ました。
*sjisでの文字化けを回避するための方法
**MySQLの設定
-下記のような状態になるように設定する。
-MySQLとconnectした後にset names sjis;を発行する。
mysql> SHOW VARIABLES LIKE 'character\_set\_%';
+--------------------------+--------+
| Variable_name | Value |
+--------------------------+--------+
| character_set_client | cp932 |
| character_set_connection | cp932 |
| character_set_database | cp932 |
| character_set_filesystem | binary |
| character_set_results | cp932 |
| character_set_server | cp932 |
| character_set_system | utf8 |
+--------------------------+--------
7 rows in set (0.00 sec)
● システム変数の用途
character_set_system
"indentifiers" (テーブル名とかカラム名?) を格納するのに使われる。
utf8で 固定。
character_set_server
character_set_database のデフォルト値に影響する。
character_set_database
CREATE DATABASE で文字コードが指定されなかった場合、database の文字コー
ドはこれになる。
character_set_connection の値に影響する
character_set_client
クライアントから渡された SQL 文はこの文字コードであると解釈される。
character_set_connection
キャラクタセットイントロデューサ (例えば『_ujis'ほげ'』)が省略された
SQL 文中の文字列リテラルはこの文字コードであると解釈される。
character_set_results
サーバーがクライアントに返す結果をこの文字コードに変換する。
この変数を NULL にセットすると、結果に対する文字コード変換をしないよ
うにできる。
**Linux での mysql.cnfの設定
win用と同じ設定にしてもうまくいかなっかった。グローバル値は上記のようになったが、セッション値はujisになった。よって自動変換をしないようにskipしたら直った。
**null の演算
-Accessの場合はNz()関数
-MySQLではcoalesce() 関数は、最初の null でないデータを返す。 coalesce($変数,0)
select coalesce(null, 'abc', 'def');
+------------------------------+
| coalesce(null, 'abc', 'def') |
+------------------------------+
| abc |
+------------------------------+
**別名での定義(レスポンスに差があるのか)
-別名を使用したとき
select seisank_ns.katasikic from seisank_ns inner join (select seisank_nsh.katasikic from seisank_nsh) as H on seisank_ns.katasikic = H.katasikic
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|h
|1|PRIMARY||ALL|||||507||
|1|PRIMARY|seisank_ns|index||alt2|58||4340|Using where; Using index |
|2|DERIVED|seisank_nsh|index||atl1|58||507|Using index |
-使用しなかったとき
select seisank_ns.katasikic from seisank_ns inner join seisank_nsh on seisank_ns.katasikic = seisank_nsh.katasikic
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|h
|1|SIMPLE|seisank_nsh|index||atl1|58||507|Using index |
|1|SIMPLE|seisank_ns|index||alt2|58||4340|Using where; Using index |
やっぱり、副問い合わせの分が余分にかかっている。
**2つのカラムでLike句を使う
2つのテーブル顧客住所と住所があります。
|顧客ID|住所1|住所2|h
|1|北海道|札幌市手稲区○○|
|2|北海道|旭川市△■|
|住所ID|市区町村名|文字数|h
|1|札幌市手稲区|6|
|2|旭川市|3|
住所テーブルを使って、顧客テーブルの住所1の北海道(都道府県)を市区町村に置き換えます。
Accessでは
UPDATE 顧客, 住所 SET 顧客.住所1 = 住所!市区町村名,
顧客.住所2 = Right([住所2],Len([住所2])-住所!文字数)
WHERE (((顧客.住所2) Like [住所]![市区町村名] & "*"));
MySQLでは
UPDATE 顧客, 住所 SET 顧客.住所1 = 住所!市区町村名,
顧客.住所2 = Right(住所2,CHAR_LENGTH(住所2-住所.文字数)
WHERE (((顧客.住所2) Like concat(住所.市区町村名,'%') ));
ポイントは文字列の連結にconcatを使うことと、文字列の長さを求めるのにCHAR_LENGTHを使うこと~
SQLServerではうまく行きませんでした。直積の書き方が違うみたい。「UPDATE 顧客, 住所」のところでエラーが出る。
結果は
|顧客ID|住所1|住所2|h
|1|札幌市手稲区|○○|
|2|旭川市|△■|
nonプログラミングでこんな処理ができます。SQLは便利だ。
** ODBCドライバーのエラー
[MySQL][ODBC 3.51 Driver]Lost connection to MySQL server at 'reading initial communication packet', system error: 0~
新しいPCにODBCドライバーをインストールしましたが、上記エラーで繋がりません?何でだろう?~
このページを読むと http://stackoverflow.com/questions/961928/could-not-connect-lost-connection-to-mysql-server-at-reading-initial-communica やはりセキュリティの関係のようでした。MySQLが動いているLinuxサーバーのhosts関係に新しくつなぐPCを登録して事なきを得ました。
表示オプション
横に並べて表示:
変化行の前後のみ表示: