cseでSQLServerにODBC接続してSELECTすると全角文字が途中までしか取
cseでSQLServerにODBC接続してSELECTすると全角文字が途中までしか取れない件について
まずcseでこんなSQL流してテーブルを創帝する。CREATE TABLE TEST (
COL1 CHAR(10),
COL2 NVARCHAR(10),
PRIMARY KEY(COL1)
)それから作ったテーブルをcseで見る。
NVARCHAR(10)と定義したつもりなのにNVARCHAR(20)になってるがな。更にSQLで見る。(スペシャルサンクス:http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1221537092 のベストアンサーじゃないほう)
SELECT T.name, C.name, Y.name, C.max_length, C.precision, C.scale, C.is_nullable, ISNULL(I.index_id, 0) AS is_pk
FROM sys.tables T
LEFT JOIN sys.columns C ON C.object_id=T.object_id
LEFT JOIN sys.types Y ON Y.system_type_id=C.system_type_id AND Y.user_type_id=C.user_type_id
LEFT JOIN sys.index_columns I ON I.object_id=C.object_id AND I.column_id=C.column_id AND I.index_id=1
WHERE T.type='U' AND T.name='test'
ORDER BY T.name, C.column_id
NVARCHARのmax_lengthはCREATE時の2倍になるが、
この定義情報をcseが勘違いしてNVARCHAR(20)だと思ってしまうでよろしいか。
そしてINSERT。
INSERT INTO TEST VALUES('1234567890', '1234567890')
まあこれは問題ないだろう続いて全角を入れてみましょう。
INSERT INTO TEST VALUES('234567890', '234567890')
OH!23456しか表示されないYO!しかし。
SELECT * FROM TEST WHERE COL2 = '23456'
取れない(-、_ー)SELECT * FROM TEST WHERE COL2 = '234567890'
取れた!ъ( `з゚)内部的にはちゃんと全部入ってるようで。
5文字しか表示されないのは
cse「NVARCHAR(20)ね、あっSQLServerだからコレ俺勘違いしてるね?正しくはNARCHAR(10)か、よっしゃ10バイト表示するで」
とかそんなふうになってるのでしょうか。特に知る気はしないですが。