いちばん失敗した人決定戦

文字列長を調べる関数として、Web上で“char_length”という関数を見つけ、早速使ってみました。

紹介ページでは、全角も半角も1文字は1という結果が返って来ると書かれています。
しかし私の場合、そんな結果が返って来ません。
名簿テーブル(UTF-8)の姓カラム(UTF-8)に漢字名(UTF-8)が入っており、ここにchar_length関数を使うと、漢字2文字なら6、3文字なら9という結果が返って来ます。
Web上で説明されているような、2や3という結果は一つも返って来ません。
半角1文字(UTF-8)ならちゃんと1で返って来るのですが、全角1文字(UTF-8)は3と返って来るようです。

使用環境やバージョンによるものかな、と思って調べてみたのですが、そういった情報は発見できませんでした(むしろ、自分より古いバージョンのMySQLでも正常結果が返って来ている例も発見したりして・・・)

どこか設定の問題でしょうか?
対処法があれば教えてください。

宜しくお願いします。

Windows XP Pro SP3
MySQL 5.1.30

A 回答 (2件)

ご利用のクライアント環境はどうなっているのでしょう?



(1)MySQLの標準クライアント
(2)MySQL WorkbenchやphpMyAdminなど接続用のアプリ
(3)phpなどから直接プログラムの一部として実行
    • good
    • 0
この回答へのお礼

ありがとう

コメントを頂き、ありがとうございます。

MySQLには、ActivePerl5.8.8を使い、DBI経由で接続しています。
スクリプト自体はUTF-8で書いており、内部処理はUTF8フラグONで行っています。
接続用のアプリというものは特に使っていません。
MySQL附属のMySQL Command Line Clientで、設定など全てを行っています。

今回の現象は、char_length関数を、ActivePerl上で実行しても、MySQL Command Line Clientで実行しても、結果は同じです。

そして、今回一つ試してみたのですが、char_length関数で6と返って来る漢字二文字の姓に、length関数を使ってみました。
そうしたら、ActivePerlでも、MySQL Command Line Clientでも、13や14という結果が返って来ました。
UTF-8で漢字二文字なら6バイトのはず。
もうこの辺から何かおかしいですよね?

お礼日時:2015/06/16 12:36

なんだか既に検討がついているような質問文ですが、CHARSETがずれているんだと思います。


そのテーブルのCHARSETを調べてみてUTF8以外であればそれが原因だと思います。
    • good
    • 0
この回答へのお礼

ありがとう

回答を頂き、ありがとうございます。

いえいえ、全然見当が付かずに困っております。

ご指摘の点をもう一度確認してみました。
-----------------------
show create database → DEFAULT CHARACTER SET utf8
show create table → DEFAULT CHARSET utf8
-----------------------
カラム単位では特別な文字コードの設定はしておりません。

他にどこかチェックする点がありますでしょうか?

宜しくお願いします。

お礼日時:2015/06/13 16:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!