misc.log

日常茶飯事とお仕事と

SQL Server のText型に対するInsertに関する制約は?

お仕事メモ。

SQL Server 2012上に用意したテーブルのText型カラムに、長い文字列を突っ込もうとしたところ「入らない」という事態が発生。書き込み処理はLinux上で稼働するPHPから。疑うべきポイントはドライバやSQL Serverの設定やらいろいろありそうなのですが、とりあえず文字数に関する制限などが無いかを調べてみています。

SQL Serverのサイズに関する制約を見てみる

MSDNSQL Server 2016 ドキュメントに情報がありました。

Maximum Capacity Specifications for SQL Server
https://msdn.microsoft.com/en-us/library/ms143432.aspx

日本語版はSQL Server 2014ドキュメントですがこちら。

SQL Server の最大容量仕様
https://msdn.microsoft.com/ja-jp/library/ms143432(v=sql.120).aspx

この中に「Columns per INSERT statement」として「4096」との記載があります。これか!?と思いましたがこれは「列数」。1回の処理の列数上限ですからちょっと違いますね……。

同じ問題に直面している人はいないのか?

これが課題ですね。とりあえずGoogleで「sql server text insert 4096」をキーワードに検索すると…こんなのがヒットしました。

stackoverflow.com

データをText型からとってきたら、4096バイト?文字?で切れてしまうというもの。この解決法として、下記のブログにある「SET TEXTSIZE」コマンドでのサイズ指定が提示されています。

SQL Server, PHP and Truncating Text / AddedBytes
https://www.addedbytes.com/blog/sql-server-php-truncating-text/

これを試してみましょうか。