MySQLは範囲外の数値をどのように処理しますか?
列データ型の許容範囲外のMySQL数値の処理は、次のようにSQLモードに依存します-
(A)有効なSQL厳密モード - 厳密なSQLモードが有効になっている場合、MySQLは範囲内の値を入力するとエラーを返します。この場合、一部またはすべての値の挿入に失敗しました。
たとえば、列のデータ型としてTINYINTとUNSIGNEDTINYINTを持つ2つの列を持つテーブルを作成しました。
mysql> Create table counting(Range1 Tinyint, Range2 Tinyint Unsigned); Query OK, 0 rows affected (0.14 sec)
次のコマンドを使用して、厳密なSQLモードを有効にしました
mysql> Set SQL_MODE ='traditional'; Query OK, 0 rows affected (0.00 sec)
ここで、範囲外の値を列に挿入しようとすると、MySQLはエラーを反映し、両方の挿入が失敗しました。これは、以下のクエリで確認できます-
mysql> Insert into Counting(Range1, Range2) Values(256,256); ERROR 1264 (22003): Out of range value for column 'Range1' at row 1 mysql> Select * from counting; Empty set (0.00 sec)
(B)無効なSQL厳密モード - 制限付きSQLモードが無効になっている場合、値はMySQLによってその列データ型の適切なエンドポイントまでクリップされ、結果の値が累積されます。 MySQLは、クリッピングが原因で発生する列割り当て変換の結果である警告を反映します。
たとえば、SQL strictモードを無効にした後で列に値を挿入する場合、MySQLは警告を反映し、適切なエンドポイントにトリミングした後に値を格納します。以下のクエリで理解できます-
mysql> Set SQL_MODE = ''; Query OK, 0 rows affected (0.00 sec) mysql> Insert Into Counting(Range1,Range2) values (256,256); Query OK, 1 row affected, 2 warnings (0.02 sec) mysql> Show Warnings; +---------+------+-------------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------------+ | Warning | 1264 | Out of range value for column 'Range1' at row 1 | | Warning | 1264 | Out of range value for column 'Range2' at row 1 | +---------+------+-------------------------------------------------+ 2 rows in set (0.00 sec) mysql> Select * from Counting; +--------+--------+ | Range1 | Range2 | +--------+--------+ | 127 | 255 | +--------+--------+ 1 row in set (0.00 sec)
-
MySQLで範囲間の値を見つける方法は?
これには、MySQLのBETWEEN演算子を使用します。まずテーブルを作成しましょう- mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Start int, -> End int -> ); Query OK, 0 rows affected (0.91 sec) 挿入コマンド-を使用して、テーブルにいくつか
-
MySQLで列の値をCSVとして表示するにはどうすればよいですか?
列の値をCSVとして表示するには、GROUP_CONCAT()を使用します。 まずテーブルを作成しましょう- mysql> create table DemoTable786 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentName varchar(100) ) AUTO_INCREMENT=101; Query OK, 0 rows affected (0.70 sec) 挿入コマンド-を使用して、テーブルにいくつかのレコードを挿入します mys