mysqlで特定のテーブルだけやたらエラーになる

他のテーブルだと同じようなsql叩いてもこけない。
例えば、
SELECT COUNT(*) FROM item
はこけないけど、
SELECT COUNT(*) FROM order
だとこける。

なんでだーと思って、いろいろ探したら原因はこれ。
識別子が予約語である場合や、識別子に特殊文字が含まれている場合は、引用符として使用したバッククォート(「`」)文字でその識別子を必ず囲む必要があります。

ショッピングサイトとかで安易にorderとかつけたらはまった。
ということで、正解はこれ。
SELECT COUNT(*) FROM `order`

バッククォートとかって滅多に使わないから、そういう発想なかったわ。
キーボード上探したもの。
phpMyAdminで出てるsql文にはやたらついているなーって思ったけど、これね。

うむ。

phpMyAdminでExcelのcsvファイルをインポートする際のCSVオプション

検索してみるといろいろ出てくるんだけど、その通りにやっても上手くいかなかったのでメモ。

※大前提としてクライアントはウィンドウズ。

■ローカルでの作業
・Excelの吐き出したcsvをテキストエディタにて文字コードを変換(文字コード:UTF-8)
・改行を使っているセルは勝手に「"」で囲われているので、検索置換で消す。

■phpMyAdminでの作業
・ファイルの文字セット:utf-8
・部分インポート:チェックする
・インポート済ファイルの書式:CSV
・フィールドの区切り記号:,(カンマ)
・フィールドの囲み記号:0
※Nullとか未入力とかって書いてあるサイトが多かったけど、それだとエラーになったんで
・フィールドのエスケープ記号:\
・行の終端記号 \r
・カラム名:未記入
・none EUC SJIS エンコーディングに変換する:noneにチェック
・全角カナに変換する:未チェック

これでいけた。
行の終端記号のところで「\r\n」って入れたらエラーになった。
本当は「\r\n」の方が良いんだろうけど、ようわからん。

あと100行インポートしようとしたら101行目がエラーってなったけど、特に問題ないみたい。

タグクラウドにリンクを張りました(続)

前回言い訳していた以下の点対応しました。

・ページャー機能
・複数タグの絞込み対応(一部)

ページャー機能は、
「数字だけのタグはページ番号と判断する」
とルール付けすることで解決しました。
これで
http://diary.key1.org/tag/music/5
みたいな感じのURLになります。
いやあ、素晴らしく綺麗!(自己満足)

複数タグの絞込みは、インターフェイス部分はまだ出来ないんだけど、URLの問い合わせには対応しました。
相変わらず5つまでしか絞り込めないんだけど、実用面ではそんなに問題ないので良いかなと。
ま、そんなに記事が無いんであんまりありがたみを感じられないけど。

サブクエリーが!とかって前回愚痴ってたけど、再帰結合ってので何とか凌いた。
参考サイト:SQL 表結合(join) - 単純結合、等価結合、非等価結合、外部結合、再帰結合 - SAK Streets
ふぅ・・・。

以前の会社で使っていたOracleでは普通に使えていたので(5年以上前)、Mysql4.1未満はサブクエリーに対応してないってことにびっくりした。
結構それで困っている人もいるみたいね。

パフォーマンスとかもっと高い次元での話もあると思うけど、Viewとかサブクエリーとかそういう次元でも、細かい機能がちゃんと実装されている辺が、やっぱ商用なのかなと。
やたら重かったってイメージしかないけどね。

いやあ、勉強になりました。

PHP4.4.x+MySQL4.1.X+Ethna2.3.2+UTF-8

仕事でPHP4.4.x+MySQL4.1.X+Ethna2.3.2で文字コードはUTF-8という環境でシステムを作ることに。
結構苦労したのでメモ。

■UTF-8について
なんとなくオシャレだなとは思っていたのですが、EthnaがEUC-JPがデフォルトなので特にUTF-8で作りたいとは思っていませんでした。
が、Javascriptを絡ませようとするとUTF-8の方が使い勝手が良いので、敵に回した時にどっちがやっかいかなと考えた時に、経験不足のJavascriptってことになりました。
あと、のちのち全文検索する可能性もあったので、以下のサイトを参考にしたいってのもありました。
MySQL FULLTEXT + Ngram : LIKE検索より数十倍高速な、お手軽 日本語全文検索 について|blog|たたみラボ

■PHP
htaccessファイルに以下の記入して設置。
ActionFormのfilter周りがinternal_encodingを見ているので。
php_value mbstring.language "Japanese"
php_value mbstring.internal_encoding "UTF-8"

■EthnaのUTF-8化
皆さん考えることは同じなようで、たくさんのページが出てきましたが結局ここを参考にしました。
ずんWiki - PHP/Ethna/UTF-8化

デバッグ時のPHPの内部エラーメッセージもUTF-8化するには以下のサイトを参考にEthna.phpを触ります。
エラーメッセージがEUC-JPで書かれているのでそれをUTF-8で送るようにする。

※2007/9/20追記
上記参考サイトの二つを適用すると、アクションフォームでのエラーメッセージが一部文字化けするという事態が発生します。
で、Ethna.phpで追加する一文を以下のように変更すると直ります。
- $message = mb_convert_encoding($message, 'UTF-8', 'EUC-JP');
+ $message = mb_convert_encoding($message, 'UTF-8', 'UTF-8,EUC-JP');

あと、以下のファイルも変更しておくと文字化けしません。
@Ethna/tpl/unittest.tpl
@Ethna/tpl/info.tpl

charset=EUC-JP
↓
charset=UTF-8

■MySQL4.1
一番怖かったのがMySQL4.1系。
あまりの怖さに手を出したくなかったのですが、こればっかりはしょうがないです。
ますは、以下のサイトを参考にMySQLを設定。
MySQL4.1系UTF-8の場合 - phpspot

あと、環境は違いますがphpMyAdmin使っていたので、以下のサイトも参考になりました。
artful xampp:Mysqlに関するPHPMyAdminの文字化け

あとはEthnaの方でAppObjectを使っていたので、以下のサイトを参考にSET NAMES utf8をセット。
GRANADA Hatena - EthnaでAppObjectを使うときデータベースの文字コードを指定する

※2007/09/20追記
getObject('Hoge', 'hogeid', '1111')
みたいにgetObjectと同時に引数で値を取得する際に文字化け発覚。
親のコンストラクタでセットしちゃってるみたいなので、子のコンストラクタへ親のコンストラクタを丸ごと持ってきて、以下のように2行追加。

$this->my_db_rw =& $db_list['rw'];
$this->my_db_ro =& $db_list['ro'];
// XXX: app objはdb typeを知らなくても動くべき
$this->my_db_type = $this->my_db_rw->getType();

+ // utf-8対応
+ $this->db->query("SET NAMES utf8");


いやあ、大変だ。。。
1 | 2 | 3 次のページ ≫ 3 of 3

アーカイブ

2012

  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
  • 09
  • 10
  • 11
  • 12

2011

2010

2009

2008

2007

コンタクト

longkey1[at]gmail[dot]com