2007年8月アーカイブ

UCSとUnicode

| コメント(0) | トラックバック(0)

わかり辛い文字コードの話。

説明している際に自分でも混乱するので備忘録として書留る。
UCSとUnicodeは符号化文字集合、要するに文字セット(文字表)の事。
主な違いは策定団体。
UnicodeはUnicodeConsortiumが作成した21ビットの文字集合。
Unicode 3.1など
ISO/IECはUnicodeConsortiumの文字セットを基にしてUCSを標準化したが31ビットまで拡張している。
UCS-4など
文字符号化方式は共にUTFを用いる。
8ビット単位の可変長コード(1〜4バイト)にエンコードするUTF-8等。

書いている内容に色々問題が多いので全訂正。
そのうち訂正記事を書こう。

符号化文字集合と文字符号化方式の混同は避けよう。
自戒を込めて。

虚に入りがちで忘れやすいInnoDBに対する制限。

The maximum row length, except for VARCHAR, BLOB and TEXT columns, is slightly less than half of a database page. That is, the maximum row length is about 8000 bytes. LONGBLOB and LONGTEXT columns must be less than 4GB, and the total row length, including also BLOB and TEXT columns, must be less than 4GB. InnoDB stores the first 768 bytes of a VARCHAR, BLOB, or TEXT column in the row, and the rest into separate pages.

テキスト型及びBLOB型及びVARCHAR型を除く一行の総バイト数は
8000バイトまで。テキスト型及びBLOB型及びVARCHAR型は
それ以上格納できるが行最初の768バイト迄は他の型と
同じところに格納する為、合計値8000バイトを超えられない。
つまりVARCHAR型だけで長さ100のカラムを作ると80個迄しか
作成できない。

ポイントは文字コードをマルチバイトにしているとテーブルは
作成できてもデータは格納できない条件が在り得る事。

CREATE TABLE t1 (
c1 VARCHAR(100),
c2 VARCHAR(100),
...
c39 VARCHAR(100),
c40 VARCHAR(100)
) ENGINE = InnoDB DEFAULT CHARSET latin1;

この場合総文字列長しては4000バイトの為作成可能。

CREATE TABLE t1 (
c1 VARCHAR(100),
c2 VARCHAR(100),
...
c39 VARCHAR(100),
c40 VARCHAR(100)
) ENGINE = InnoDB DEFAULT CHARSET utf8;

この場合総文字列長は理論上(UCS-4の場合) 4×100x40 = 16000バイト
(厳密に言うと理論値では6×100x40 = 24000バイト)
格納できる事となり8000バイトを超えてしまう。
間違っていたので訂正。
この場合総文字列長は理論上3×100x40=12000バイト格納できることとなり 8000バイトを超えてしまう。
(※MySQLのUTF8は3バイト文字までしか対応していない。)

この為、テーブルの作成は出来てもインサートエラーとなってしまうので
気をつける必要がある。

もっとも、このようなテーブルの場合テーブル定義を見直すのが
第一だと思うけれども。

Profile

| コメント(0) | トラックバック(0)

涼風庵 概要

庵主

雅号 涼風庵 風伯
筆名 railute

■履歴
1994年 東京都立大泉高校卒業 46期生
2000年 明海大学 外国語学部 日本語学科卒業 (べたな文系SEです)
2000年 某受託開発会社会社にSEとして入社
2004年 某金融系受託開発会社に転職
2005年 某情報サービス会社に転職
2009年 縁ありスタートアップに参加
2011年株式会社INTHEFOREST設立。代表取締役に就任

 

A型。物心ついた頃より身も心も練馬原住民。
県庁と言う言葉を知りません。(都庁です。)
市民プールと言う言葉を知りません。(区民プールです。)

■保有技術
・OS - Solaris,FreeBSD,Linux(Ubuntu,Debian)
・N/W - CISCO,F5等(多少)
・言語 - Python,Perl,C,Java,PHP,shell script等
・DB - Oracle,MySQL,PostgreSQL、Cassandra

現在自分の設立した会社で場を作ることを目標にいろいろなサービスを模索しています。
以前、某大規模サイトのシステム運用(DBA主担当)をやってました。

この業界に入ってから一貫して保守・運用畑にいます。
基本何でも屋です。
平行でセールスエンジニアしてた事もあります。

■趣味と特技
PCいじりは趣味と実益兼ねてます。何処から何処までが仕事か解り難くなる嫌いがあるのですけど。
大学時代スイミングインストラクターなんてしてました。
日赤水安持ってました。今はもう期限切れてますが、再度取れと言われても無理でしょう。
コーヒー・紅茶・中国茶・日本茶大好きです。年間かなりの金額をぶち込んでます。

 

 ■コンタクト アドレス

日記始め

| コメント(0) | トラックバック(0)
つれづれなるままに日ぐらし硯に向ひて、心に移り行くよしなしごとを、
そこはかとなく書きつくれば、怪しうこそ物狂ほしけれ。

兼好法師の有名な言葉を拝借して、この庵を開きたいと思います。
気楽に、気長に、気負わずに。 ただ、ただ、戯言を並べようかなと思います。

 よろしくお願いいたします。

ウェブページ