
文字列長を調べる関数として、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件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
ご利用のクライアント環境はどうなっているのでしょう?
(1)MySQLの標準クライアント
(2)MySQL WorkbenchやphpMyAdminなど接続用のアプリ
(3)phpなどから直接プログラムの一部として実行
コメントを頂き、ありがとうございます。
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バイトのはず。
もうこの辺から何かおかしいですよね?
No.1
- 回答日時:
なんだか既に検討がついているような質問文ですが、CHARSETがずれているんだと思います。
そのテーブルのCHARSETを調べてみてUTF8以外であればそれが原因だと思います。
回答を頂き、ありがとうございます。
いえいえ、全然見当が付かずに困っております。
ご指摘の点をもう一度確認してみました。
-----------------------
show create database → DEFAULT CHARACTER SET utf8
show create table → DEFAULT CHARSET utf8
-----------------------
カラム単位では特別な文字コードの設定はしておりません。
他にどこかチェックする点がありますでしょうか?
宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL 複数テーブルのupdate
-
sqlplusで表示が変なので、出力...
-
SQL、2つのテーブルで条件一致...
-
テーブル名をカラムとして取得...
-
DBからタブ区切りのCSVデータを...
-
ROWNUMでUPDATEをしたいのです...
-
テーブルやカラムの物理名のネ...
-
SQLでSUMなどの関数でデータが...
-
Oracleのview、synonymをCOMPIL...
-
カラム位置変更
-
マテリアライズド・ビューの変更
-
SQL*LoaderでCSVから指定した列...
-
Viewのカラムの長さが不明?
-
SQL(oracle)でご助言いただきた...
-
降順で並び替えて昇順で受け取...
-
【エクセル】データテーブルの...
-
「テーブルに座って……」という...
-
男性と2人で飲食店に行きテーブ...
-
リレーションシップが出来ません。
-
ワークテーブルなのに自動で削...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
sqlplusで表示が変なので、出力...
-
SQL*LoaderでCSVから指定した列...
-
SQL、2つのテーブルで条件一致...
-
update文で改行を入れる
-
DBからタブ区切りのCSVデータを...
-
ROWNUMでUPDATEをしたいのです...
-
SQLでSUMなどの関数でデータが...
-
カラム位置変更
-
SQL(oracle)でご助言いただきた...
-
SQL 複数テーブルのupdate
-
テーブル名をカラムとして取得...
-
DELETE文とロックについて
-
LONG型の先頭250バイトを Varch...
-
SQLで違うテーブルの値を比較し...
-
特定のカラムが更新されたとき...
-
件数とデータを同時に取得する...
-
半角英数文字の抽出がしたい。
-
OracleのSQLで同テーブルのカラ...
-
数値をNUMBER型にするかCHAR型...
-
Viewのカラムの長さが不明?
おすすめ情報