
文字列長を調べる関数として、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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
- その他(プログラミング・Web制作) awkの文字列比較はPOSIXロケールまたはCロケールにおいてバイナリ値の比較に使えるか gawkな 1 2023/04/22 09:21
- Excel(エクセル) 全角文字「ヴ」の半角文字「ヴ」への変換方法について 3 2022/11/05 12:07
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL、2つのテーブルで条件一致...
-
SQL 複数テーブルのupdate
-
テーブル名をカラムとして取得...
-
カラム位置変更
-
SQL(oracle)でご助言いただきた...
-
特定のカラムが更新されたとき...
-
OracleのSQLで同テーブルのカラ...
-
複数の検索結果をSELECT条件に...
-
sqlplusで表示が変なので、出力...
-
テーブルやカラムの物理名のネ...
-
Oracleのプロシージャについて
-
DBからタブ区切りのCSVデータを...
-
SQL*LoaderでCSVから指定した列...
-
in句で指定した文字列で抽出さ...
-
SQLでSUMなどの関数でデータが...
-
SQL update方法
-
SQL plusで 試合日時と対戦国の...
-
複数テーブルを結合するには?
-
あるテーブルだけをキャッシュ...
-
改行コードの検出方法につきまして
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL、2つのテーブルで条件一致...
-
SQL*LoaderでCSVから指定した列...
-
sqlplusで表示が変なので、出力...
-
update文で改行を入れる
-
SQL 複数テーブルのupdate
-
テーブル名をカラムとして取得...
-
SQLでSUMなどの関数でデータが...
-
ROWNUMでUPDATEをしたいのです...
-
カラム位置変更
-
SQLで違うテーブルの値を比較し...
-
SQL(oracle)でご助言いただきた...
-
特定のカラムが更新されたとき...
-
Oracleのview、synonymをCOMPIL...
-
テーブルやカラムの物理名のネ...
-
DBからタブ区切りのCSVデータを...
-
数値をNUMBER型にするかCHAR型...
-
LONG型の先頭250バイトを Varch...
-
OracleのSQLで同テーブルのカラ...
-
Viewのカラムの長さが不明?
-
件数とデータを同時に取得する...
おすすめ情報