日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
2024年11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

アーカイブ

2006年09月 のアーカイブ

りんご と 青空


りんごちゃんと青空です。

8月の実は いくりちゃんです。
今日は、種から育てた 樹齢13年の本物のりんごちゃんです。
3本いたのだけれど 1本は他の木に養分を取られて幼いころに他界しました
現在2本います。(おぃ 動物かい。 )

花も実もなりません(>_<)

りんごちゃんには、アブラムシくんがたくさんやってきます

ひょっとして18年くらい?かかるのかなぁ?・・・

桃栗3年 柿8年
りんごは いったい・・・

・・・ ・・・ ぎゃーーーーーーー 25年・・・・
っていうか ほんとか? 
あと12年で実がつくなら
まぁいいか・・・
 挿し木で増やせばいいし・・・

ううう・・・ 桃か栗にしておけば今頃は・・・・

とうことで まとめ

  種から
実が
付くまで


(近所
のお店)

害虫 備考
桃・栗 3年 80cm
600円
   
8年 80cm
800円
   
柚子(ゆず) 18年      
びわ 9年   アリさんがきます。  
さくらんぼ 不明   毛虫がたくさんつきます。
桜より2〜3週間
先に花がさくので
一足先にお花見を楽しめます。

苗を買った方がいいです

【結論】
 種から育てるより、苗を買った方がいいです

SQLite Tips(sjis)

作成:2006.0915
編集:2006.09.15


【SQL】
文字化け
【現象】
shift-jisやeucで
データに標準関数を使用すると
予期せぬ
文字化けを誘発します。
【対応】
マルチバイトに対応したユーザー関数を組み込む
utf8でデータ扱う
SELECT '新',lower('新');
表示結果 2.x, 3.x sjis euc utf8
'新'
lower('新')
SELECT '新品', substr('新品', 1, 1),substr('表', 1, 1);
表示結果 2.x sjis euc utf8
'新品' 新品 新品 新品
substr('新品', 1, 1) - ? ?
substr('表', 1, 1) - ? ?
表示結果  3.x sjis euc utf8
'新品' 新品 新品 新品
substr('新品', 1, 1) - ?
substr('表', 1, 1) \
注) - ?  は表示不能
SELECT like('_\','表'), '表' like '_\' 
表示結果 2.x sjis euc utf8
like('_\','表') 1 0 0
'表' like '_\' 1 0 0
表示結果 3.x sjis euc utf8
like('_\','表') 1 0 0
'表' like '_\' 1 0 0
まとめ
2.x 上の例からもわかるように
文字列関係の標準関数を利用すると
意図しない結果が返ります。

文字列関係の標準関数を使わず、
ユーザー定義関数を使いましょう

ユーザー関数で 標準関数を上書きすることができます。
注意キーワード例:
  like, substr, lower, ........
3.x 文字操作系の標準関数を使う場合は
utf8でデータを扱いましょう
  ユーザー関数で 標準関数を上書きすることができます。

・likeの動作が説明書と違う。
  式 like 文字列式
  like(文字列式, 式,)
※ like(x,y)  : 実行すると説明書と位置が逆<like(y,x)>。 誤実装?   誤植?
 
sqlite/lang_expr.html
にも書いてありますが、

A bug: SQLite only understands upper/lower case for 7-bit Latin characters. 
LIKE operator is case sensitive for 8-bit iso8859 characters or UTF-8 characters.
そういうことで、utf8でデータを操作した方が無難ですね。
確認用コード
php5 <?php
  $charsetlist = array('sjis'=>'shift_jis', 'utf-8'=>'utf-8', 'euc-jp'=>'euc-jp');
  $charset = 'sjis';
 
  switch ($_GET['charset'])
  {
    case 'utf-8':
      $charset = 'utf-8';
      break;
    case 'euc-jp':
      $charset = 'euc-jp';
      break;
    case 'sjis':
      $charset = 'sjis';
      break;
    default:
      $charset = '';
      break;
  }
?>

<html>
<head>
<?php
  echo sprintf('<meta http-equiv="Content-Type" content="text/html; charset=%s;"'
   , $charset ? $charsetlist[$charset] : 'shift_jis');

  echo sprintf('<title>%s</title>'
   , $charset ? $charsetlist[$charset] : 'shift_jis');

?>
</head>
<?php

  if (!$charset) {
    $uri = $_SERVER["SCRIPT_NAME"];
    print '<frameset rows="*,30%,30%">'."\n";
    print sprintf('<frame name="top" src="%s">', $uri.'?charset=sjis')."\n";
    print sprintf('<frame name="bottom" src="%s">', $uri.'?charset=utf-8')."\n";
    print sprintf('<frame name="bottom1" src="%s">', $uri.'?charset=euc-jp')."\n";
    print '</frameset>'."\n";
  }
   else
{  
  print "<body>";
  mb_language('ja');
    $sql = array();
array_push($sql , "SELECT '新',lower('新');");
array_push($sql , "SELECT '新品', substr('新品', 1, 1),substr('表', 1, 1);");

  $dbh = array();
  $user = $pass = '';
  $dbh['3'] = new PDO('sqlite::memory:', $user, $pass);
  $dbh['2'] = new PDO('sqlite2::memory:', $user, $pass);
 
  print "charset[$charset]<br>\n";

  function print_table($items ,$options=array())
  {
     global $charset;
    print  '<table border="1" cellpadding="5" cellspacing="0" bordercolor="#008000">';
    print sprintf('  <tr> <td bgcolor="#F8FFE6">%s %s.x</td>'
             .'<td bgcolor="#F8FFE6">%s</td> </tr>'
, mb_convert_encoding('表示結果', $charset, 'auto')
, $options['ver']
, $charset );
         
     foreach($items as $key => $value)
  {
     if (is_int($key)) { continue; }
     print "<tr>";
     print '<td align="center" bgcolor="#CCFFCC">'.htmlspecialchars($key).'</td>';
     print '<td align="center">'.htmlspecialchars($value).'</td>';
     print "</tr>";
  }
    print  '</table>';
  }

  foreach($dbh as $key => $value)
  {
     if (!$dbh[$key])
{
    $s = sprintf("sqlite[%s]に接続できませんでした。", $key);
    $s = mb_convert_encoding($s, $charset, 'auto');

    print($s."<br>\n");
    continue;
}
print ("<br>\n");

     foreach ($sql as $sqlkey => $sqltext)
  {
     $sqltext = mb_convert_encoding($sqltext, $charset, 'auto');
     print "[sql] ".htmlspecialchars($sqltext)."<br>\n";
     foreach ($dbh[$key]->query($sqltext) as $row)
  {
print_table($row ,array('ver'=>$key));
      //  print_r($row);
  }
  }
     $dbh[$key] = null;
  }
 
}

  print "</body>";
?>
</html>

標準関数上書き編  
substr


pdoの例
mb_language('ja');

$charset = 'euc-jp'; // dbで使う文字コードを指定

function sqlite_ufunc_mb_substr($p1, $p2, $p3)
{
  global $charset;
  $p2--;
  if (!$charset) { return mb_substr($p1, $p2, $p3); }
  return mb_substr($p1, $p2, $p3,$charset);
}

$db->sqliteCreateFunction('substr', 'sqlite_ufunc_mb_substr', 3);
lower


2.xの例
sqlite_create_function ($db, 'lower',  'sqlite_ufunc_mb_lower');

 function sqlite_ufunc_mb_lower($str)
 {
  global $charset;
  if (!$charset)
    {
    return mb_strtolower($str);
    }
   else
    {
    return mb_strtolower($str, $charset);
    }
 }
sql関数との引数の違いを注意しながら
mb_関数で 置換していくと
そのまま使えるようになるかもしれないです。
注:利用する文字コードの指定を間違わないように適時変更してください。
   

Firebird の動作検証

作成日:2006.09.06
更新日:2006.09.06
更新日:2009.06.27

マイPCで 動作したもの 動作しなかったもの リスト

Version

コンパイラ

Windows

Vista XP 9.x系
Me 98 95
1.5.3 embed win  Delphi2005
(WinXP)
   
2.0.3 上記同様     ×
2.1.2
上記同様


2.5.x






3.x  

?(-)

空白は未確認 (※説明書上は、対応)

【win 95】
2.0.x系は、付属ツールも起動と同時にエラーで落ちました。
Win95では、1.5.x系で我慢するしかなさそうです

Firebird_v2.1.2.InstallationGuide.pdfには、
2.xでは、いずれWin9.x系をサポートしなくなるだろうと書かれている。


【Firebird 1.5x embedの感想】
 短所:boolean型がないのが痛い。
 長所:処理が速い。
  win95でもさくさく動くのがイイ。
  開発の止まったBDEより断然お得?
 日本語列名が使えてGood

【Firebird 2.x embedの感想】
  いろいろ機能アップ。
 またしてもboolean型がないのが痛い
 2009年現在、2.0.x、2.1.x、2.5.xの3系統がある。

Firebird 2 新しい予約語 (Newly Reserved Words)
  BIT_LENGTH
BOTH
CHAR_LENGTH
CHARACTER_LENGTH
CLOSE
CROSS
FETCH
LEADING
LOWER
OCTET_LENGTH
OPEN
ROWS
TRAILING
TRIM
Changed from Non-reserved to Reserved
  USING
Keywords Added as Non-reserved
  BACKUP *
BLOCK *
COLLATION
COMMENT *
DIFFERENCE *
IIF *
NEXT
SCALAR_ARRAY *
SEQUENCE
RESTART
RETURNING *
Keywords No Longer Reserved
  ACTION
RESTRICT
WEEKDAY *
CASCADE
ROLE
YEARDAY *
FREE_IT *
TYPE
No Longer Reserved as Keywords
  BASENAME *
GROUP_COMMIT_WAIT *
NUM_LOG_BUFS *
CACHE *
LOGFILE *
RAW_PARTITIONS *
CHECK_POINT_LEN *
LOG_BUF_SIZE *
Those marked with an asterisk (*) are not present in the SQL standard.
Firebird 2 RC4
がいつの間にか出荷?されていますね

もうすぐリリースか?とおもいきや
なんとRC5が予定されているではありませんか!!

といいうことは来月
RC5
年末当たりにリリースですか?


PR

[PR]