mysql:13913
From: goungoun <goungoun <gounx2@xxxxxxxxxx>>
Date: Wed, 25 Apr 2007 18:35:26 +0900
Subject: [mysql 13913] cp932 で select '十'; すると '十\' になる。(was Re: Access2002+MyODBCでエラー)
こんにちは。 On Mon, 23 Apr 2007 19:00:12 +0900 ezaki <kjc_post@xxxxxxxxxx> wrote: > 下記構成でAccess2002からMyODBC経由で(「十」などを)挿入/更新すると > 下記のSQLでエラーが出てしまいます。 > 「UPDATE `info` SET `name`='十\' WHERE `Code` = 'A0010000000' AND > `stamp` = '20070420170520';」 > 最新版のODBC5を入れてもダメでした。 linuxに閉じたローカル環境で、同様の現象が再現したので ご報告します。 ・サーバ、linux(debian etch)のMySQL5.0 ・クライアント、同環境のmysqlクライアント ↓こんなスクリプトを用意して。 # select '十'; とすると、後のスクリプトの書き方によっては # エラーになるのであえて'<十>'としています。 ----------------------------------------- $ cat query.txt set names cp932; show variables like 'char%'; select '<十>'; select length('<十>'); select char_length('<十>'); select trim('<十>'); select length(trim('<十>')); select char_length(trim('<十>')); select hex('<十>'); ----------------------------------------- ↓実行するとこんな感じになりました。 (linuxがutf-8環境なので、nkfでスクリプト文字コード変換してます) ----------------------------------------- $ nkf -W -s hoge | mysql -u test -p | nkf -S -w Enter password: Variable_name Value character_set_client cp932 character_set_connection cp932 character_set_database utf8 character_set_filesystem binary character_set_results cp932 character_set_server utf8 character_set_system utf8 character_sets_dir /usr/share/mysql/charsets/ <十> <十\> ←★★★ length('<十>') 4 char_length('<十>') 3 trim('<十>') <十\> length(trim('<十>')) 4 char_length(trim('<十>')) 3 hex('<十>') 3C8F5C3E ----------------------------------------- ポイントは上記の★★★印のところです。 そもそも、マルチバイトを(バイトではなく)1文字として 認識してるのか?とか疑問だったので、char_lengthもしてみました。 '<十>'で3文字と出たので、認識されてますね。 あと、hexの出力も正常ですね。 バージョン周りの情報は以下です。 $ sudo mysql --version mysql Ver 14.12 Distrib 5.0.32, for pc-linux-gnu (i486) using readline 5.2 $ sudo mysqld --version mysqld Ver 5.0.32-Debian_7etch1-log for pc-linux-gnu on i486 (Debian etch distribution) ps. ちなみに、キャラクタセットsjisでもやってみましたが、同じ現象が発生します。 -- goungoun <gounx2@xxxxxxxxxx> http://goungoun.dip.jp/app/
13883 2007-04-23 19:00 [ezaki <kjc_post@xxxx] Access2002+MyODBCでエラー 13885 2007-04-23 23:50 ┣["T.Hirotsu" <hirotsu] 13889 2007-04-24 11:39 ┃┗[ezaki <kjc_post@xxxx] -> 13913 2007-04-25 18:35 ┗[goungoun <gounx2@xxx] cp932 で select '十'; すると '十\' になる。(was Re: Access2002+MyODBCでエラー) 13914 2007-04-25 20:54 ┗[goungoun <gounx2@xxx]