MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのINSERT()関数で「pos」が文字列の長さの範囲外の場合、結果はどうなる?

MySQLのINSERT()関数は、挿入位置を示す「pos」が元の文字列の長さの範囲内にない場合、挿入処理を実行せず、元の文字列をそのまま返します。

「pos」が範囲外とみなされるのは、主に次のようなケースです。

  • posに負の値を指定した場合
  • posに0(ゼロ)を指定した場合
  • posが元の文字列の文字数を2以上超える場合

それぞれのケースについて、以下の具体例で動作を確認していきましょう。

例1:posに負の値を指定した場合

次のクエリでは、posに-1という負の値を指定しています。このため位置が文字列の長さの範囲外となり、挿入は行われず元の文字列がそのまま返されます。

mysql> Select INSERT('Tutorialspoint',-1,4,'.com');
+--------------------------------------+
| INSERT('Tutorialspoint',-1,4,'.com') |
+--------------------------------------+
| Tutorialspoint                       |
+--------------------------------------+
1 row in set (0.00 sec)

例2:posに0を指定した場合

次のクエリでは、posに0を指定しています。文字列の位置は1から始まるため、0は範囲外と判断され、挿入は実行されません。

mysql> Select INSERT('Tutorialspoint',0,4,'.com');
+-------------------------------------+
| INSERT('Tutorialspoint',0,4,'.com') |
+-------------------------------------+
| Tutorialspoint                      |
+-------------------------------------+
1 row in set (0.00 sec)

例3:posが文字数を大きく超える場合

次のクエリでは、元の文字列「Tutorialspoint」は14文字ですが、posに16を指定しています。有効な位置は最大でも「文字数+1」までなので、16は文字数を2超える値となり範囲外です。その結果、挿入は行われません。

mysql> Select INSERT('Tutorialspoint',16,4,'.com');
+--------------------------------------+
| INSERT('Tutorialspoint',16,4,'.com') |
+--------------------------------------+
| Tutorialspoint                       |
+--------------------------------------+
1 row in set (0.00 sec)

補足:正常に挿入が行われるケースとの違い

一方、posが「文字数+1」以内であれば挿入は正常に実行されます。特にposが「文字数+1」の場合、newstrは文字列の末尾に追加されます。また、lenが残りの文字数を超えている場合は、pos以降のすべての文字がnewstrで置き換えられます。さらに、引数のいずれかにNULLが含まれる場合はNULLが返される点にも注意してください。

  1. Python文字列の最大長はどれくらい?メモリと環境による上限を解説

    Python文字列の最大長は環境によって決まるPythonにおける文字列の最大長は、理論上の上限よりも、実際に利用できるメモリ容量とPythonの実行環境(32ビットか64ビットか)によって決まります。言語仕様上、文字列の長さは Py_ssize_t 型で管理されており、64ビット環境では最大約9.2×1018(263-1)文字まで扱えることになっています。しかし、現実的にはこの上限に達する前にメモリが足りなくなります。64ビット環境の場合64ビット版のPythonを搭載し、64GBのメモリを備えたマシンであれば、約63GB程度の巨大な文字列でも十分に扱うことが可能です。さらにメモリを増設すれ

  2. 【初心者向け】Pythonで文字列の長さを取得する方法をわかりやすく解説

    Pythonで文字列の長さを取得する基本:len()関数Pythonには、文字列やリスト、タプルといった複合オブジェクトの長さ(要素数)を取得できる組み込み関数 len() が用意されています。文字列の長さを知りたい場合は、対象の文字列をそのまま len() の引数として渡すだけでOKです。print(len(abcdefghijklmnopqrstuvwxyz))出力結果:26変数に格納した文字列の長さを取得する実際の開発では、変数に代入した文字列の長さを調べる場面が多いでしょう。次のように、変数を len() に渡すだけで簡単に取得できます。text = Hello, Python! pr